@cometchat/skills 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/bin/install.js +27 -0
- package/package.json +14 -1
- package/skills/cometchat/SKILL.md +233 -69
- package/skills/cometchat/references/asking-questions.md +48 -0
- package/skills/cometchat-a11y/SKILL.md +3 -2
- package/skills/cometchat-android-v5/SKILL.md +2 -1
- package/skills/cometchat-android-v5-calls/SKILL.md +36 -22
- package/skills/cometchat-android-v5-calls/references/README.md +1 -1
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +7 -5
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +4 -4
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +33 -25
- package/skills/cometchat-android-v5-calls/references/call-session.md +2 -2
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +5 -5
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +2 -2
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +20 -14
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +1 -1
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +43 -27
- package/skills/cometchat-android-v5-calls/references/participant-management.md +3 -3
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +25 -19
- package/skills/cometchat-android-v5-calls/references/recording.md +2 -2
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +1 -1
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +5 -9
- package/skills/cometchat-android-v5-calls/references/session-settings.md +3 -3
- package/skills/cometchat-android-v5-calls/references/setup.md +1 -1
- package/skills/cometchat-android-v5-calls/references/share-invite.md +9 -4
- package/skills/cometchat-android-v5-calls/references/video-controls.md +4 -4
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +2 -2
- package/skills/cometchat-android-v5-components/SKILL.md +4 -3
- package/skills/cometchat-android-v5-core/SKILL.md +5 -3
- package/skills/cometchat-android-v5-customization/SKILL.md +171 -7
- package/skills/cometchat-android-v5-extensions/SKILL.md +7 -4
- package/skills/cometchat-android-v5-features/SKILL.md +5 -4
- package/skills/cometchat-android-v5-placement/SKILL.md +2 -1
- package/skills/cometchat-android-v5-production/SKILL.md +2 -1
- package/skills/cometchat-android-v5-push/SKILL.md +2 -3
- package/skills/cometchat-android-v5-testing/SKILL.md +2 -1
- package/skills/cometchat-android-v5-theming/SKILL.md +2 -1
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +3 -2
- package/skills/cometchat-android-v6/SKILL.md +2 -1
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +11 -7
- package/skills/cometchat-android-v6-calls/SKILL.md +79 -18
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +87 -0
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +24 -15
- package/skills/cometchat-android-v6-calls/references/call-session.md +2 -2
- package/skills/cometchat-android-v6-calls/references/device-management.md +17 -16
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +7 -4
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +13 -8
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +6 -4
- package/skills/cometchat-android-v6-compose-components/SKILL.md +52 -29
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +156 -1
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +129 -40
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +27 -1
- package/skills/cometchat-android-v6-core/SKILL.md +208 -28
- package/skills/cometchat-android-v6-events/SKILL.md +4 -1
- package/skills/cometchat-android-v6-extensions/SKILL.md +2 -1
- package/skills/cometchat-android-v6-features/SKILL.md +26 -2
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +31 -1
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +172 -1
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +20 -5
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +36 -5
- package/skills/cometchat-android-v6-migration/SKILL.md +44 -42
- package/skills/cometchat-android-v6-production/SKILL.md +6 -3
- package/skills/cometchat-android-v6-push/SKILL.md +43 -2
- package/skills/cometchat-android-v6-testing/SKILL.md +11 -8
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +26 -5
- package/skills/cometchat-angular-calls/SKILL.md +256 -389
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +3 -2
- package/skills/cometchat-angular-calls/references/call-layouts.md +29 -12
- package/skills/cometchat-angular-calls/references/call-session.md +2 -2
- package/skills/cometchat-angular-calls/references/custom-ui.md +18 -10
- package/skills/cometchat-angular-calls/references/device-management.md +53 -34
- package/skills/cometchat-angular-calls/references/group-calls.md +45 -24
- package/skills/cometchat-angular-calls/references/idle-timeout.md +31 -15
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +7 -6
- package/skills/cometchat-angular-calls/references/raise-hand.md +9 -4
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +32 -39
- package/skills/cometchat-angular-calls/references/ringing-integration.md +3 -1
- package/skills/cometchat-angular-calls/references/share-invite.md +11 -5
- package/skills/cometchat-angular-calls/references/virtual-background.md +29 -0
- package/skills/cometchat-angular-components/SKILL.md +149 -620
- package/skills/cometchat-angular-core/SKILL.md +232 -312
- package/skills/cometchat-angular-customization/SKILL.md +415 -223
- package/skills/cometchat-angular-features/SKILL.md +216 -334
- package/skills/cometchat-angular-patterns/SKILL.md +168 -359
- package/skills/cometchat-angular-placement/SKILL.md +189 -560
- package/skills/cometchat-angular-production/SKILL.md +241 -92
- package/skills/cometchat-angular-push/SKILL.md +280 -294
- package/skills/cometchat-angular-testing/SKILL.md +430 -158
- package/skills/cometchat-angular-theming/SKILL.md +190 -265
- package/skills/cometchat-angular-troubleshooting/SKILL.md +192 -157
- package/skills/cometchat-astro-patterns/SKILL.md +2 -1
- package/skills/cometchat-calls/SKILL.md +25 -19
- package/skills/cometchat-calls/references/use-case-broadcast.md +15 -10
- package/skills/cometchat-calls/references/use-case-marketplace.md +2 -3
- package/skills/cometchat-calls/references/use-case-support.md +3 -4
- package/skills/cometchat-calls/references/use-case-team.md +23 -12
- package/skills/cometchat-calls/references/use-case-telehealth.md +3 -4
- package/skills/cometchat-components/SKILL.md +163 -25
- package/skills/cometchat-core/SKILL.md +255 -19
- package/skills/cometchat-customization/SKILL.md +50 -25
- package/skills/cometchat-features/SKILL.md +313 -34
- package/skills/cometchat-flutter-v5/SKILL.md +10 -4
- package/skills/cometchat-flutter-v5-calls/SKILL.md +188 -158
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +48 -24
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +20 -15
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +100 -145
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +12 -8
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +30 -36
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +15 -13
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +12 -9
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +115 -65
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +41 -30
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +17 -14
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +8 -2
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-core/SKILL.md +5 -4
- package/skills/cometchat-flutter-v5-customization/SKILL.md +136 -5
- package/skills/cometchat-flutter-v5-events/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-messages/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-production/SKILL.md +15 -6
- package/skills/cometchat-flutter-v5-push/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-testing/SKILL.md +17 -6
- package/skills/cometchat-flutter-v5-theming/SKILL.md +2 -1
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +7 -6
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +3 -2
- package/skills/cometchat-flutter-v6/SKILL.md +17 -16
- package/skills/cometchat-flutter-v6-calls/SKILL.md +72 -57
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +5 -3
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +89 -0
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +15 -12
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +2 -2
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +9 -3
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +10 -10
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +15 -7
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +6 -3
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +23 -16
- package/skills/cometchat-flutter-v6-components/SKILL.md +32 -11
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +39 -11
- package/skills/cometchat-flutter-v6-core/SKILL.md +182 -21
- package/skills/cometchat-flutter-v6-customization/SKILL.md +97 -25
- package/skills/cometchat-flutter-v6-events/SKILL.md +3 -2
- package/skills/cometchat-flutter-v6-features/SKILL.md +15 -6
- package/skills/cometchat-flutter-v6-messages/SKILL.md +111 -60
- package/skills/cometchat-flutter-v6-migration/SKILL.md +18 -25
- package/skills/cometchat-flutter-v6-placement/SKILL.md +79 -50
- package/skills/cometchat-flutter-v6-production/SKILL.md +13 -12
- package/skills/cometchat-flutter-v6-push/SKILL.md +41 -19
- package/skills/cometchat-flutter-v6-testing/SKILL.md +4 -4
- package/skills/cometchat-flutter-v6-theming/SKILL.md +38 -5
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +182 -17
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +12 -4
- package/skills/cometchat-i18n/SKILL.md +139 -78
- package/skills/cometchat-ios/SKILL.md +4 -2
- package/skills/cometchat-ios-calls/SKILL.md +225 -95
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +11 -9
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +45 -0
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +6 -7
- package/skills/cometchat-ios-calls/references/call-layouts.md +31 -91
- package/skills/cometchat-ios-calls/references/call-session.md +51 -54
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +33 -29
- package/skills/cometchat-ios-calls/references/custom-ui.md +38 -38
- package/skills/cometchat-ios-calls/references/group-calls.md +33 -70
- package/skills/cometchat-ios-calls/references/idle-timeout.md +24 -25
- package/skills/cometchat-ios-calls/references/in-call-chat.md +19 -23
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +128 -70
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +20 -20
- package/skills/cometchat-ios-calls/references/raise-hand.md +14 -227
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +35 -122
- package/skills/cometchat-ios-calls/references/ringing-integration.md +17 -16
- package/skills/cometchat-ios-calls/references/share-invite.md +8 -12
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +4 -4
- package/skills/cometchat-ios-components/SKILL.md +200 -12
- package/skills/cometchat-ios-core/SKILL.md +173 -45
- package/skills/cometchat-ios-customization/SKILL.md +276 -110
- package/skills/cometchat-ios-features/SKILL.md +64 -36
- package/skills/cometchat-ios-placement/SKILL.md +15 -12
- package/skills/cometchat-ios-production/SKILL.md +12 -4
- package/skills/cometchat-ios-push/SKILL.md +53 -19
- package/skills/cometchat-ios-testing/SKILL.md +14 -9
- package/skills/cometchat-ios-theming/SKILL.md +39 -3
- package/skills/cometchat-ios-troubleshooting/SKILL.md +41 -21
- package/skills/cometchat-native-bare-patterns/SKILL.md +34 -17
- package/skills/cometchat-native-calls/SKILL.md +28 -16
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +2 -2
- package/skills/cometchat-native-calls/references/call-layouts.md +15 -14
- package/skills/cometchat-native-calls/references/call-session.md +2 -2
- package/skills/cometchat-native-calls/references/custom-ui.md +12 -8
- package/skills/cometchat-native-calls/references/device-management.md +53 -30
- package/skills/cometchat-native-calls/references/group-calls.md +35 -30
- package/skills/cometchat-native-calls/references/idle-timeout.md +6 -6
- package/skills/cometchat-native-calls/references/in-call-chat.md +10 -8
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +2 -2
- package/skills/cometchat-native-calls/references/raise-hand.md +15 -13
- package/skills/cometchat-native-calls/references/recording-screen-share.md +49 -170
- package/skills/cometchat-native-calls/references/share-invite.md +7 -5
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +4 -2
- package/skills/cometchat-native-components/SKILL.md +84 -52
- package/skills/cometchat-native-core/SKILL.md +101 -32
- package/skills/cometchat-native-customization/SKILL.md +150 -28
- package/skills/cometchat-native-expo-patterns/SKILL.md +57 -26
- package/skills/cometchat-native-features/SKILL.md +23 -16
- package/skills/cometchat-native-placement/SKILL.md +19 -10
- package/skills/cometchat-native-production/SKILL.md +9 -3
- package/skills/cometchat-native-push/SKILL.md +2 -1
- package/skills/cometchat-native-testing/SKILL.md +1 -2
- package/skills/cometchat-native-theming/SKILL.md +54 -29
- package/skills/cometchat-native-troubleshooting/SKILL.md +9 -3
- package/skills/cometchat-nextjs-patterns/SKILL.md +20 -6
- package/skills/cometchat-placement/SKILL.md +42 -3
- package/skills/cometchat-production/SKILL.md +12 -5
- package/skills/cometchat-react-calls/SKILL.md +220 -10
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +4 -3
- package/skills/cometchat-react-calls/references/call-layouts.md +5 -6
- package/skills/cometchat-react-calls/references/call-session.md +1 -1
- package/skills/cometchat-react-calls/references/custom-ui.md +61 -15
- package/skills/cometchat-react-calls/references/device-management.md +55 -51
- package/skills/cometchat-react-calls/references/group-calls.md +18 -23
- package/skills/cometchat-react-calls/references/idle-timeout.md +25 -12
- package/skills/cometchat-react-calls/references/in-call-chat.md +7 -7
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +9 -11
- package/skills/cometchat-react-calls/references/raise-hand.md +14 -14
- package/skills/cometchat-react-calls/references/recording-screen-share.md +39 -38
- package/skills/cometchat-react-calls/references/ringing-integration.md +2 -2
- package/skills/cometchat-react-calls/references/share-invite.md +4 -5
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +20 -2
- package/skills/cometchat-react-calls/references/virtual-background.md +32 -0
- package/skills/cometchat-react-patterns/SKILL.md +44 -4
- package/skills/cometchat-react-push/SKILL.md +258 -72
- package/skills/cometchat-react-router-patterns/SKILL.md +10 -4
- package/skills/cometchat-react-testing/SKILL.md +14 -5
- package/skills/cometchat-theming/SKILL.md +181 -18
- package/skills/cometchat-troubleshooting/SKILL.md +40 -20
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
name: cometchat-calls
|
|
3
3
|
description: Entry-point for adding CometChat Voice & Video Calling to any React, React Native, Angular, native Android, native iOS, or Flutter project. Detects the framework, picks standalone (calls-only) vs additive (calls on top of existing chat) mode, and routes to the per-family calls skill. Invoked by the top-level `cometchat` dispatcher when `product === "voice-video"` or `chat-messaging+voice-video`, and directly when the user asks for calls explicitly.
|
|
4
4
|
license: "MIT"
|
|
5
|
-
allowed-tools: "shell, file-read, file-search, file-list, ask-user"
|
|
6
5
|
metadata:
|
|
7
6
|
author: "CometChat"
|
|
8
7
|
version: "4.0.0"
|
|
9
8
|
tags: "cometchat calls voice video webrtc dispatcher react react-native angular android ios flutter callkit pushkit voip"
|
|
10
9
|
---
|
|
11
10
|
|
|
11
|
+
> **Ground truth:** the per-platform Calls SDK + `docs/calls`. **Official docs:** https://www.cometchat.com/docs/calls/javascript/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
|
|
12
|
+
|
|
12
13
|
## Use this skill when
|
|
13
14
|
|
|
14
15
|
- The top-level `cometchat` dispatcher's Step 3.0 routes here because `product === "voice-video"` or `chat-messaging+voice-video`
|
|
@@ -25,12 +26,14 @@ This is the **entry point for every calls integration**. Do NOT invoke per-famil
|
|
|
25
26
|
| **React Native** (Expo + bare) | `cometchat-native-calls` | `@cometchat/calls-sdk-react-native` | Yes |
|
|
26
27
|
| **Angular** (12–15) | `cometchat-angular-calls` | `@cometchat/calls-sdk-javascript` | Yes |
|
|
27
28
|
| **Android** (V5 stable) | `cometchat-android-v5-calls` | `com.cometchat:calls-sdk-android:5.x` (Cloudsmith) | Yes — production-ready |
|
|
28
|
-
| **Android** (V6
|
|
29
|
+
| **Android** (V6 GA) | `cometchat-android-v6-calls` | `chatuikit-{compose,kotlin}-android:6.0.+` **+ explicit `com.cometchat:calls-sdk-android:5.0.+` peer dep** (the "calls fold in" marketing is incomplete) | Yes — GA 2026-05-25, but ships broken OOTB: **5 required workarounds (W1–W5)**, incl. the peer dep + not using `CometChatCallButtons`. See per-family skill. |
|
|
29
30
|
| **iOS** (V5 stable) | `cometchat-ios-calls` | `CometChatCallsSDK` (SPM / CocoaPods) | Yes |
|
|
30
31
|
| **Flutter** (V5 stable) | `cometchat-flutter-v5-calls` (already exists) | `cometchat_calls_sdk` (Cloudsmith) | Yes |
|
|
31
|
-
| **Flutter** (V6
|
|
32
|
+
| **Flutter** (V6 GA) | `cometchat-flutter-v6-calls` (already exists) | Calls fold into `cometchat_chat_uikit: ^6.0.1` | Yes — GA 2026-05-25 (one explicit `MaterialApp(navigatorKey: CallNavigationContext.navigatorKey)` wiring required, see per-family skill) |
|
|
33
|
+
|
|
34
|
+
> **Status:** All nine calls skills (this dispatcher + react, native, angular, ios, android-v5, android-v6, flutter-v5, flutter-v6) are authored and source-verified against each family's real SDK surface (decompiled `calls-sdk-android` AARs, `CometChatCallsSDK.swiftinterface`, `@cometchat/calls-sdk-{javascript,react-native}` `.d.ts`, and the Flutter `cometchat_calls_*` pub-cache). Android V5 ships 17 pre-authored sub-skills folded into `cometchat-android-v5-calls/references/`. Per-family caveats that are load-bearing: **Android V6 needs 5 workarounds (W1–W5)**; **Flutter V6 needs the `MaterialApp(navigatorKey: CallNavigationContext.navigatorKey)` wiring**; **iOS has no `CometChatCalls.login()`** (auth is per-session via `generateToken`).
|
|
32
35
|
|
|
33
|
-
> **
|
|
36
|
+
> **Clarification contract (ALL coding agents) — read `references/asking-questions.md`.** Every "ask"/"AskUserQuestion" in this skill follows that contract: on any agent without a structured-question primitive, render the question as a **numbered text list and WAIT** for a real answer (never default/infer; auto-mode doesn't authorize skipping), map by value/label not position, and accept a free-text fallback.
|
|
34
37
|
|
|
35
38
|
## Why a separate calls dispatcher
|
|
36
39
|
|
|
@@ -279,6 +282,7 @@ These are the production-grade non-negotiables. The dispatcher checks them in St
|
|
|
279
282
|
5. **Cleanup on hangup.** Camera-light-stays-on / mic-stays-hot is the canonical "looks fine in dev, fails review" bug. Every per-family skill includes the explicit teardown checklist.
|
|
280
283
|
6. **Permissions with rationale.** Microphone, camera, screen-record (where supported), notifications. All four, all with usage strings.
|
|
281
284
|
7. **`IncomingCall` mounted at app root in standalone mode.** Not at the chat surface — calls is the whole product, the listener has to be alive everywhere.
|
|
285
|
+
8. **Honor "SDK only" when the user says SDK only (ENG-35711).** If the developer explicitly asks for the Calls SDK without UI Kit components — phrasing like *"pure SDK,"* *"no UI Kit components,"* *"build my own call UI,"* *"SDK-only path"* — the per-family skill MUST NOT scaffold `CometChatCallButtons`, `CometChatIncomingCall`, `CometChatOutgoingCall`, or `CometChatOngoingCall`. Use Chat SDK `CometChat.initiateCall` for signaling + Calls SDK `joinSession` (and a hand-written button/screen) for the surface. **Never silently fall back to UI Kit components** "because they're easier" — that's a documented frustration from two testers. If the developer's request can't be served without a UI Kit component, ask explicitly: *"This piece needs the kit's `<CometChatXxx>` — happy to use it, or do you want a hand-written equivalent?"* Don't decide for them.
|
|
282
286
|
|
|
283
287
|
## Anti-patterns
|
|
284
288
|
|
|
@@ -290,26 +294,28 @@ These are the production-grade non-negotiables. The dispatcher checks them in St
|
|
|
290
294
|
|
|
291
295
|
## Ground truth references
|
|
292
296
|
|
|
293
|
-
Per-family `-calls` skills cite from these sources. The dispatcher itself doesn't write code; the per-family skills do.
|
|
297
|
+
Per-family `-calls` skills cite from these sources. The dispatcher itself doesn't write code; the per-family skills do. To verify which SDK signatures the skills target, check each family's **published SDK artifact + public docs** (the source-of-truth — an earlier draft pointed at a local `~/Downloads/calls-sdk/` clone that no longer exists; use the installed/published packages instead):
|
|
294
298
|
|
|
295
|
-
- **Android V5:**
|
|
296
|
-
- **iOS V5:**
|
|
297
|
-
- **JavaScript (web):**
|
|
298
|
-
- **React Native:**
|
|
299
|
-
- **Flutter:**
|
|
300
|
-
- **Angular:**
|
|
299
|
+
- **Android V5:** `com.cometchat:calls-sdk-android:5.x` (decompile the Maven AAR, or `javap` the Gradle-cached classes) + [docs](https://www.cometchat.com/docs/sdk/android/overview). The 17 sub-topics are folded into `cometchat-android-v5-calls/references/{recording,screen-sharing,picture-in-picture,background-handling,voip-calling,audio-controls,video-controls,participant-management,custom-ui,in-call-chat,call-logs,session-settings,event-listeners,join-session,ringing-integration,setup}.md`.
|
|
300
|
+
- **iOS V5:** `CometChatCallsSDK` 5.x — the `.swiftinterface` inside the resolved framework (SPM `.build/artifacts/…` or CocoaPods `Pods/…`; it ships vendored inside `CometChatUIKitSwift` for additive) + [docs](https://www.cometchat.com/docs/calls/ios/overview).
|
|
301
|
+
- **JavaScript (web):** `@cometchat/calls-sdk-javascript@5` — the package `.d.ts` (`node_modules/@cometchat/calls-sdk-javascript/dist/index.d.ts`) + [docs](https://www.cometchat.com/docs/calls/javascript/overview).
|
|
302
|
+
- **React Native:** `@cometchat/calls-sdk-react-native@5` — the package `.d.ts` + `@cometchat/calls-lib-webrtc` (Cloudsmith) + [docs](https://www.cometchat.com/docs/calls/react-native/overview).
|
|
303
|
+
- **Flutter:** `cometchat_calls_sdk` (V5: paired `cometchat_calls_uikit:^5.0`; V6: folded into `cometchat_chat_uikit:^6.0`) — the pub-cache source — plus the `cometchat-flutter-v5-calls` / `cometchat-flutter-v6-calls` skills (audited against it).
|
|
304
|
+
- **Angular:** the same JS Calls SDK (`@cometchat/calls-sdk-javascript`) wrapped in Angular Inputs/Outputs — verify via `@cometchat/chat-uikit-angular` `.d.ts` + the JS SDK `.d.ts`.
|
|
301
305
|
|
|
302
|
-
##
|
|
306
|
+
## Two calling modes (Ringing + Session) — and the kit's prebuilt UI for Ringing
|
|
303
307
|
|
|
304
|
-
|
|
308
|
+
> **Naming clarification (ENG-35699 follow-up):** This section labels three rows below — "Standard", "Ringing", and "Call Session" — but **architecturally there are only TWO modes**: Ringing (signaling-driven) and Session (URL-driven). "Standard" is the **kit's prebuilt UI for Ringing** (using `<CometChatCallButtons>` + `<CometChatIncomingCall>`), not a third architectural mode. The Step 3.0 prompt above asks Ringing vs Session — that's the load-bearing decision. The Standard row is the most-common rendering choice WITHIN Ringing mode.
|
|
305
309
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
|
309
|
-
|
|
310
|
-
| **
|
|
310
|
+
CometChat supports two underlying calling workflows; the table below splits Ringing into "Standard (kit-prebuilt UI)" vs "Ringing (custom UI on signaling)" for routing purposes only:
|
|
311
|
+
|
|
312
|
+
| Row | Underlying mode | Driver | When to use | Per-family ref |
|
|
313
|
+
|---|---|---|---|---|
|
|
314
|
+
| **Standard** | Ringing | UI Kit (`CometChatCallButtons` + `CometChatIncomingCall`) | 80% case — chat-driven calls with prebuilt UI | covered in per-family `SKILL.md` |
|
|
315
|
+
| **Ringing (custom UI)** | Ringing | Chat SDK call entity + Calls SDK session | Custom incoming/outgoing call UI on top of CometChat signaling | `references/ringing-integration.md` |
|
|
316
|
+
| **Call Session** | Session | Calls SDK `joinSession` directly (no ringing) | Meeting-room URLs, scheduled calls, conference rooms | `references/call-session.md` |
|
|
311
317
|
|
|
312
|
-
Standard is the default unless the user explicitly says "custom incoming call UI" (→ Ringing) or "meeting link / join with sessionId" (→ Call Session). The Tier 4 use-cases telegraph which mode they want — broadcast + team huddles use Call Session; telehealth + marketplace + support use Standard or Ringing.
|
|
318
|
+
Standard is the default Ringing rendering unless the user explicitly says "custom incoming call UI" (→ Ringing custom) or "meeting link / join with sessionId" (→ Call Session). The Tier 4 use-cases telegraph which mode they want — broadcast + team huddles use Call Session; telehealth + marketplace + support use Standard or Ringing custom.
|
|
313
319
|
|
|
314
320
|
## Use-case integration patterns (Tier 4)
|
|
315
321
|
|
|
@@ -39,10 +39,9 @@ const settings = {
|
|
|
39
39
|
hideChangeLayoutButton: true, // Don't let attendees change
|
|
40
40
|
|
|
41
41
|
hideRecordingButton: false, // Presenter records
|
|
42
|
-
|
|
42
|
+
autoStartRecording: true, // Always record broadcasts (replay value)
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
hideVirtualBackgroundButton: false,
|
|
44
|
+
hideScreenSharingButton: false, // For slides
|
|
46
45
|
|
|
47
46
|
hideChatButton: false, // Q&A overflow + reactions
|
|
48
47
|
hideShareInviteButton: false, // Encourage sharing
|
|
@@ -53,7 +52,7 @@ const settings = {
|
|
|
53
52
|
joinWithMutedAudio: true,
|
|
54
53
|
joinWithMutedVideo: true,
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
idleTimeoutPeriodBeforePrompt: 86_400_000, // Disable idle timeout — events run long
|
|
57
56
|
};
|
|
58
57
|
```
|
|
59
58
|
|
|
@@ -113,12 +112,18 @@ function PresenterRaisedHandsList() {
|
|
|
113
112
|
});
|
|
114
113
|
}, []);
|
|
115
114
|
|
|
116
|
-
function unmuteParticipant(uid: string) {
|
|
117
|
-
// Send a custom message asking participant to unmute themselves
|
|
118
|
-
// (CometChat doesn't support force-unmute — privacy)
|
|
119
|
-
|
|
120
|
-
//
|
|
121
|
-
|
|
115
|
+
async function unmuteParticipant(uid: string) {
|
|
116
|
+
// Send a custom message asking the participant to unmute themselves
|
|
117
|
+
// (CometChat doesn't support force-unmute — privacy).
|
|
118
|
+
// There is NO CometChatCalls.lowerParticipantHand(uid) — the SDK only
|
|
119
|
+
// exposes lowerHand() for the LOCAL user. To lower someone else's hand,
|
|
120
|
+
// message them and let their client call lowerHand() (see raise-hand.md).
|
|
121
|
+
const msg = new CometChat.CustomMessage(
|
|
122
|
+
uid, CometChat.RECEIVER_TYPE.USER, "lower_hand", {},
|
|
123
|
+
);
|
|
124
|
+
await CometChat.sendCustomMessage(msg);
|
|
125
|
+
// Optimistically drop them from our local raised-hands list
|
|
126
|
+
setRaised((prev) => prev.filter((p) => p.uid !== uid));
|
|
122
127
|
}
|
|
123
128
|
|
|
124
129
|
return (
|
|
@@ -64,12 +64,11 @@ const settings = {
|
|
|
64
64
|
|
|
65
65
|
hideRecordingButton: true, // No platform-side recording — privacy + dispute via chat archive
|
|
66
66
|
hideShareInviteButton: true, // Buyer ↔ seller only — don't allow inviting
|
|
67
|
-
|
|
68
|
-
hideVirtualBackgroundButton: false, // Privacy — most people are in their home
|
|
67
|
+
hideScreenSharingButton: false, // Useful for "show me the actual condition"
|
|
69
68
|
hideChatButton: false, // For sharing photos/details mid-call
|
|
70
69
|
|
|
71
70
|
hideRaiseHandButton: true,
|
|
72
|
-
|
|
71
|
+
idleTimeoutPeriodBeforePrompt: 600_000, // 10min idle = end (sometimes deals die)
|
|
73
72
|
};
|
|
74
73
|
```
|
|
75
74
|
|
|
@@ -57,18 +57,17 @@ const settings = {
|
|
|
57
57
|
hideChangeLayoutButton: false, // Agent may want grid for note-taking workflows
|
|
58
58
|
|
|
59
59
|
hideRecordingButton: true, // Don't let agent toggle — server-side auto-record
|
|
60
|
-
|
|
60
|
+
autoStartRecording: true, // QA recording is the policy
|
|
61
61
|
// (consent text in the in-app "By starting the call,
|
|
62
62
|
// you agree to recording for quality" notice)
|
|
63
|
-
|
|
63
|
+
hideScreenSharingButton: false, // Critical for troubleshooting
|
|
64
64
|
|
|
65
|
-
hideVirtualBackgroundButton: false, // Agent uses brand background
|
|
66
65
|
|
|
67
66
|
hideChatButton: false, // For pasting links/error messages
|
|
68
67
|
hideShareInviteButton: true, // Customer ↔ agent only
|
|
69
68
|
|
|
70
69
|
hideRaiseHandButton: true,
|
|
71
|
-
|
|
70
|
+
idleTimeoutPeriodBeforePrompt: 300_000, // 5min — short, agents are busy
|
|
72
71
|
};
|
|
73
72
|
```
|
|
74
73
|
|
|
@@ -34,17 +34,16 @@ const settings = {
|
|
|
34
34
|
hideChangeLayoutButton: false, // Let users pick (some prefer SPOTLIGHT)
|
|
35
35
|
|
|
36
36
|
hideRecordingButton: false, // Anyone can record; team norms decide
|
|
37
|
-
|
|
37
|
+
autoStartRecording: false,
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
hideVirtualBackgroundButton: false,
|
|
39
|
+
hideScreenSharingButton: false, // Critical
|
|
41
40
|
|
|
42
41
|
hideChatButton: false, // Side-chat for links
|
|
43
42
|
hideShareInviteButton: false, // Pull others in mid-call
|
|
44
43
|
|
|
45
44
|
hideRaiseHandButton: false, // For larger team meetings (10+)
|
|
46
45
|
|
|
47
|
-
|
|
46
|
+
idleTimeoutPeriodBeforePrompt: 1_800_000, // 30min — meetings can have lulls
|
|
48
47
|
};
|
|
49
48
|
```
|
|
50
49
|
|
|
@@ -56,24 +55,36 @@ const settings = {
|
|
|
56
55
|
// When someone starts a call in a team group, fire a custom message
|
|
57
56
|
// so other members see "🟢 Huddle started by Sarah" in the channel.
|
|
58
57
|
async function startHuddle(group: CometChat.Group) {
|
|
59
|
-
// 1.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
// 1. Mint a session via the Chat SDK. A Call returned by initiateCall carries
|
|
59
|
+
// a server-issued sessionId — getSessionId() (chat-sdk Call.getSessionId).
|
|
60
|
+
// There is NO object-form CometChatCalls.startSession({sessionId,participants}).
|
|
61
|
+
const call = new CometChat.Call(
|
|
62
|
+
group.guid,
|
|
63
|
+
CometChat.CALL_TYPE.VIDEO,
|
|
64
|
+
CometChat.RECEIVER_TYPE.GROUP,
|
|
65
|
+
);
|
|
66
|
+
const initiatedCall = await CometChat.initiateCall(call); // returns Call
|
|
67
|
+
const sessionId = initiatedCall.getSessionId();
|
|
64
68
|
|
|
65
|
-
// 2. Post a custom message in the chat group
|
|
69
|
+
// 2. Post a custom message in the chat group so members see the huddle + can join
|
|
66
70
|
const customMessage = new CometChat.CustomMessage(
|
|
67
71
|
group.guid,
|
|
68
72
|
CometChat.RECEIVER_TYPE.GROUP,
|
|
69
73
|
"huddle_started",
|
|
70
74
|
{
|
|
71
|
-
sessionId
|
|
75
|
+
sessionId,
|
|
72
76
|
startedBy: currentUserUid,
|
|
73
77
|
startedAt: Date.now(),
|
|
74
78
|
},
|
|
75
79
|
);
|
|
76
80
|
await CometChat.sendCustomMessage(customMessage);
|
|
81
|
+
|
|
82
|
+
// 3. The starter joins the session. Each joiner does the same with the shared
|
|
83
|
+
// sessionId: generateToken(sessionId) → joinSession(token, settings, container).
|
|
84
|
+
// (calls-sdk joinSession(callToken, SessionSettings, HTMLElement) is canonical;
|
|
85
|
+
// the old startSession(callToken, callSettings, container) is deprecated.)
|
|
86
|
+
const { token } = await CometChatCalls.generateToken(sessionId);
|
|
87
|
+
await CometChatCalls.joinSession(token, sessionSettings, callContainer);
|
|
77
88
|
}
|
|
78
89
|
```
|
|
79
90
|
|
|
@@ -124,7 +135,7 @@ app.post("/webhooks/call", async (req, res) => {
|
|
|
124
135
|
## Anti-patterns
|
|
125
136
|
|
|
126
137
|
1. **Force-ringing all team members.** Annoying — they might be focused. Use channel notification + opt-in join.
|
|
127
|
-
2. **
|
|
138
|
+
2. **Assuming a screen-share quality knob exists in SessionSettings.** There is no `screenShareQuality` field on SessionSettings (verified against the calls-sdk types) — don't promise a non-API setting. Screen-share resolution is negotiated by the browser/WebRTC; tune the source (share a tab vs full screen) rather than a SessionSettings field.
|
|
128
139
|
3. **Idle timeout too short.** Standup runs 35min, idle of 600s ends it during a debate. Use 1800s (30min).
|
|
129
140
|
4. **Recording auto-on without team norms.** Some teams hate being recorded; surprise recording = trust hit. Default off; let team decide.
|
|
130
141
|
5. **No way to invite outside team mid-call.** Sometimes you need to pull in a designer or PM. Don't hide share-invite for team calls.
|
|
@@ -47,16 +47,15 @@ const settings = {
|
|
|
47
47
|
hideChangeLayoutButton: true, // Don't let user switch — calmer UX
|
|
48
48
|
|
|
49
49
|
hideRecordingButton: false, // Provider needs it
|
|
50
|
-
|
|
50
|
+
autoStartRecording: false, // NEVER auto-record without consent
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
hideVirtualBackgroundButton: false, // Patient often wants privacy
|
|
52
|
+
hideScreenSharingButton: false, // Sharing labs is core
|
|
54
53
|
|
|
55
54
|
hideChatButton: false, // For sending links/PDFs
|
|
56
55
|
hideShareInviteButton: true, // Patient ↔ provider only — no inviting
|
|
57
56
|
hideRaiseHandButton: true, // 1:1 — no need
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
idleTimeoutPeriodBeforePrompt: 600_000, // 10min — long enough for thinking pauses
|
|
60
59
|
};
|
|
61
60
|
```
|
|
62
61
|
|
|
@@ -3,19 +3,36 @@ name: cometchat-components
|
|
|
3
3
|
description: "Complete catalog of CometChat React UI Kit v6 components. Reference before writing integration code -- never invent component names."
|
|
4
4
|
license: "MIT"
|
|
5
5
|
compatibility: "@cometchat/chat-uikit-react ^6; @cometchat/chat-sdk-javascript ^4"
|
|
6
|
-
allowed-tools: "shell, file-read, file-search, file-list"
|
|
7
6
|
metadata:
|
|
8
7
|
author: "CometChat"
|
|
9
8
|
version: "3.0.0"
|
|
10
9
|
tags: "chat cometchat react components catalog reference ui-kit"
|
|
11
10
|
---
|
|
12
11
|
|
|
12
|
+
> **Ground truth:** `@cometchat/chat-uikit-react@^6` component catalog (installed package types) + `docs/ui-kit/react`. **Official docs:** https://www.cometchat.com/docs/ui-kit/react/components-overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
|
|
13
|
+
|
|
13
14
|
## Purpose
|
|
14
15
|
|
|
15
16
|
This is the single source of truth for CometChat React UI Kit v6 component names, props, and usage. **Check this catalog before writing any `<CometChat*>` JSX.** If a component is not listed here, it does not exist in the exported API.
|
|
16
17
|
|
|
17
18
|
All components are imported from `@cometchat/chat-uikit-react`. All SDK types are imported from `@cometchat/chat-sdk-javascript`.
|
|
18
19
|
|
|
20
|
+
## When to use
|
|
21
|
+
|
|
22
|
+
- Any React-family integration emitting `<CometChat*>` JSX: Vite + React, Next.js (App or Pages Router), React Router v6/v7, Astro with React islands.
|
|
23
|
+
- Before scaffolding any chat surface (conversations, messages, users, groups, calls UI).
|
|
24
|
+
- When verifying a component name or prop signature — this catalog is authoritative; the kit's `node_modules/@cometchat/chat-uikit-react/dist/types/` is the runtime source of truth that backs it.
|
|
25
|
+
|
|
26
|
+
## When NOT to use
|
|
27
|
+
|
|
28
|
+
- **React Native** (Expo or bare) — load `cometchat-native-components`. Class names are similar but **prop conventions diverge** (RN uses `onItemPress`, web uses `onItemClick` — runtime smoke 2026-06-02 confirmed). Cross-family copy-paste produces silent broken event bindings.
|
|
29
|
+
- **Angular** — load `cometchat-angular-components`. Angular kit class names are **`Component`-suffixed** (`CometChatConversationsComponent` not `CometChatConversations` — verified by runtime smoke 2026-06-02), HTML selectors are kebab-case, event bindings use round brackets for `@Output()` events. Different shape entirely.
|
|
30
|
+
- **Native Android** — load `cometchat-android-v6-{compose,kotlin}-components` (V6) or `cometchat-android-v5-components` (V5). Different package namespaces (`com.cometchat.uikit.compose.*` vs `com.cometchat.chatuikit.*`) — never reuse React component names.
|
|
31
|
+
- **iOS V5** — load `cometchat-ios-components`. UIKit Swift surface; `CometChatConversations()` zero-arg initializer + `.set(group: ...)` pattern; nothing like the React prop API.
|
|
32
|
+
- **Flutter V5 / V6** — load `cometchat-flutter-{v5,v6}-components`. Dart widget API with named parameters; V5 GetX vs V6 Bloc state-management split changes lifecycle.
|
|
33
|
+
- **Theming-only tasks** — load `cometchat-theming` (CSS variables, recipes) for color/font customization without component changes.
|
|
34
|
+
- **SDK-only chat (no UI Kit)** — this catalog assumes UI Kit components. If a future skill ships for the pure-SDK path (no `<CometChat*>` JSX), defer to it; today the closest analog is the SDK-only patterns inside `cometchat-react-calls` §4c.
|
|
35
|
+
|
|
19
36
|
### Importing `CometChat.User` / `CometChat.Group` / etc.
|
|
20
37
|
|
|
21
38
|
`CometChat.User`, `CometChat.Group`, `CometChat.BaseMessage`, `CometChat.Conversation`, `CometChat.GroupMember`, `CometChat.TextMessage` are **classes** (runtime values), not pure types. That means the import strategy depends on how you use them:
|
|
@@ -50,6 +67,35 @@ function renderHeader(user: CometChat.User) { ... }
|
|
|
50
67
|
|
|
51
68
|
## 1. Core messaging
|
|
52
69
|
|
|
70
|
+
> ⛔ **STOP — only the components in THIS catalog exist. Do not invent or recall component names from v4/older memory.** Before emitting ANY `CometChat*` component, confirm it appears in this catalog (or the kit's exports). If it's not here, it does not exist — using it produces an **unresolved-import build failure** or a blank screen. This is the #1 failure class on this skill.
|
|
71
|
+
>
|
|
72
|
+
> **The real v6 component set (the ONLY ones — `import { … } from "@cometchat/chat-uikit-react"`):** `CometChatConversations`, `CometChatMessageHeader`, `CometChatMessageList`, `CometChatMessageComposer` (+ `CometChatCompactMessageComposer`), `CometChatUsers`, `CometChatGroups`, `CometChatMessageInformation` (+ the calling/feature components in their own catalogs).
|
|
73
|
+
>
|
|
74
|
+
> **Commonly hallucinated names that were REMOVED in v6 (verified absent from the kit exports) — do NOT use:** the all-in-one composites `CometChatConversationsWithMessages`, `CometChatUsersWithMessages`, `CometChatGroupsWithMessages`, the `CometChatMessages` composite, and the `CometChatUI` god-component. **There is no single "conversations + messages" component in v6** — you compose the two panes yourself (recipe below). (Note: `CometChatMessages`/`CometChatConversationsWithMessages` DO still exist in the Flutter v6 kit — this removal is web/RN/Angular. Always check the per-family catalog.)
|
|
75
|
+
|
|
76
|
+
> **The canonical two-pane experience (what "CometChatConversationsWithMessages" used to do — now hand-composed):**
|
|
77
|
+
> ```tsx
|
|
78
|
+
> const [active, setActive] = useState<CometChat.Conversation | null>(null);
|
|
79
|
+
> // pick the peer the message views need from the selected conversation:
|
|
80
|
+
> const peer = active?.getConversationWith(); // CometChat.User | CometChat.Group
|
|
81
|
+
> return (
|
|
82
|
+
> <div style={{ display: "flex", height: "100%" }}>
|
|
83
|
+
> <div style={{ width: 320 }}>
|
|
84
|
+
> <CometChatConversations activeConversation={active ?? undefined}
|
|
85
|
+
> onItemClick={(c) => setActive(c)} />
|
|
86
|
+
> </div>
|
|
87
|
+
> <div style={{ flex: 1, display: "flex", flexDirection: "column" }}>
|
|
88
|
+
> {peer && <>
|
|
89
|
+
> <CometChatMessageHeader {...(peer instanceof CometChat.User ? { user: peer } : { group: peer })} />
|
|
90
|
+
> <CometChatMessageList {...(peer instanceof CometChat.User ? { user: peer } : { group: peer })} />
|
|
91
|
+
> <CometChatMessageComposer {...(peer instanceof CometChat.User ? { user: peer } : { group: peer })} />
|
|
92
|
+
> </>}
|
|
93
|
+
> </div>
|
|
94
|
+
> </div>
|
|
95
|
+
> );
|
|
96
|
+
> ```
|
|
97
|
+
> A `CometChatMessageHeader`/`List`/`Composer` takes EITHER `user=` OR `group=` (never both) — derive it from the clicked conversation. Conversations-list-only and single-conversation-only are both valid subsets of this.
|
|
98
|
+
|
|
53
99
|
These are the components you use to build a chat experience. Most integrations use some combination of these seven.
|
|
54
100
|
|
|
55
101
|
### CometChatConversations
|
|
@@ -172,6 +218,20 @@ Displays the name, avatar, and status of the user or group at the top of a messa
|
|
|
172
218
|
|
|
173
219
|
**Works with:** CometChatMessageList (below), CometChatCallButtons (in auxiliaryButtonView slot)
|
|
174
220
|
|
|
221
|
+
> ⚠️ **Header `onItemClick` has NO default behavior (ENG-35705).** The kit ships no built-in `<CometChatUserDetails />` / `<CometChatGroupDetails />` panel — clicking the header name/avatar produces zero visible feedback unless YOU pass an `onItemClick` callback. **Four testers flagged this as "kit feels broken."** Rule when emitting `<CometChatMessageHeader>`:
|
|
222
|
+
> 1. Either provide an `onItemClick` that opens a details panel YOU built (use the sample-app reference at `sample-app/src/components/CometChatDetails/`), OR
|
|
223
|
+
> 2. Wrap the header in a clickable region that goes elsewhere, so the avatar+name doesn't *look* like a dead end. (There is no `showInfo` prop on `CometChatMessageHeader` — don't emit it.)
|
|
224
|
+
> Do NOT mount the header bare without an `onItemClick` — it's a customer-facing dead end.
|
|
225
|
+
|
|
226
|
+
> ⚠️ **`Reply in Thread` action requires the host to wire the thread panel (ENG-35705 — clarified 2026-06-02 from "broken" to "requires wiring").** The kit's `<CometChatMessageList>` renders a "Reply in Thread" item in the message-options menu and fires `onThreadRepliesClick(parentMessage)` when tapped — but the kit does NOT ship a default thread screen. If the host doesn't bind `onThreadRepliesClick` to a thread surface, the action visually does nothing (callback fires; no UI follows). Two paths:
|
|
227
|
+
>
|
|
228
|
+
> 1. **You're not building threads** — set `hideReplyInThreadOption={true}` on `<CometChatMessageList>` to remove the menu item entirely.
|
|
229
|
+
> 2. **You ARE building threads** — bind `onThreadRepliesClick={(parent) => /* open thread surface */}` and render a separate `<CometChatMessageList parentMessageId={parent.getId()} />` inside the thread surface. Sample app's pattern: `cometchat-uikit-react-v6/sample-app/src/components/CometChatMessages/CometChatMessages.tsx:74` wires this via parent component routing.
|
|
230
|
+
>
|
|
231
|
+
> The dispatcher hard rule still defaults to option 1 (hide threads) because most integrations don't want them. Restated here at point-of-use so the catalog reader makes a conscious choice.
|
|
232
|
+
|
|
233
|
+
> ⚠️ **`Message Privately` action — hide it via the kit prop if it misbehaves (ENG-35705).** In group chats the message-options menu shows a "Message Privately" item that may do nothing on click in some kit versions. `<CometChatMessageList>` exposes `hideMessagePrivatelyOption={true}` to remove it cleanly — set that rather than living with a dead menu item.
|
|
234
|
+
|
|
175
235
|
---
|
|
176
236
|
|
|
177
237
|
### CometChatSearch
|
|
@@ -295,12 +355,13 @@ A standalone search input component. Used for filtering within other components.
|
|
|
295
355
|
**Key props:**
|
|
296
356
|
| Prop | Type | Description |
|
|
297
357
|
|---|---|---|
|
|
298
|
-
| `
|
|
299
|
-
| `
|
|
358
|
+
| `onChange` | `(input: { value?: string }) => void` | Called as the user types — read `input.value` |
|
|
359
|
+
| `searchText` | `string` | Controlled input value |
|
|
360
|
+
| `placeholderText` | `string` | Placeholder text |
|
|
300
361
|
|
|
301
362
|
**Usage:**
|
|
302
363
|
```tsx
|
|
303
|
-
<CometChatSearchBar
|
|
364
|
+
<CometChatSearchBar onChange={(input) => filterUsers(input.value ?? "")} />
|
|
304
365
|
```
|
|
305
366
|
|
|
306
367
|
**Works with:** Any list component for client-side filtering
|
|
@@ -328,7 +389,7 @@ Renders voice and video call buttons. Typically placed in the `auxiliaryButtonVi
|
|
|
328
389
|
<CometChatCallButtons user={selectedUser} />
|
|
329
390
|
```
|
|
330
391
|
|
|
331
|
-
**Works with:** CometChatMessageHeader (
|
|
392
|
+
**Works with:** CometChatMessageHeader (via its `auxiliaryButtonView` prop — there is no `menu` prop), CometChatIncomingCall (at app root)
|
|
332
393
|
|
|
333
394
|
---
|
|
334
395
|
|
|
@@ -413,6 +474,60 @@ Shows a detailed list of who reacted with what emoji on a specific message.
|
|
|
413
474
|
|
|
414
475
|
---
|
|
415
476
|
|
|
477
|
+
## 5. Notifications (catalog gap closed 2026-06-02)
|
|
478
|
+
|
|
479
|
+
Three notification-related exports that were missing from this catalog before today. Verified against `cometchat-uikit-react-v6/src/index.ts:167-169`.
|
|
480
|
+
|
|
481
|
+
### CometChatNotificationFeed
|
|
482
|
+
|
|
483
|
+
A scrollable inbox of campaign / promotional notifications. Renders a list view; integrators wire it as a dropdown or dedicated route.
|
|
484
|
+
|
|
485
|
+
**Key props:** `onItemClick: (feedItem: NotificationFeedItem) => void` to handle taps; `notificationFeedRequestBuilder` (and `notificationCategoriesRequestBuilder`) to filter — NOT `notificationsRequestBuilder`.
|
|
486
|
+
|
|
487
|
+
**Usage:**
|
|
488
|
+
```tsx
|
|
489
|
+
import { CometChatNotificationFeed } from "@cometchat/chat-uikit-react";
|
|
490
|
+
|
|
491
|
+
// feedItem is a NotificationFeedItem (campaign notification) — it has no
|
|
492
|
+
// `conversationId`; route off its own fields / deep-link payload.
|
|
493
|
+
<CometChatNotificationFeed onItemClick={(feedItem) => handleNotification(feedItem)} />
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
### CometChatNotificationBadge
|
|
499
|
+
|
|
500
|
+
A small unread-count pill, designed to attach to a nav item / icon. Auto-updates as new notifications arrive via the kit's notification feed listener.
|
|
501
|
+
|
|
502
|
+
**Key props:** All optional — defaults to showing the current unread count of the logged-in user. Style with the standard `CometChat*Style` pattern.
|
|
503
|
+
|
|
504
|
+
**Usage:**
|
|
505
|
+
```tsx
|
|
506
|
+
import { CometChatNotificationBadge } from "@cometchat/chat-uikit-react";
|
|
507
|
+
|
|
508
|
+
<button onClick={openNotificationFeed}>
|
|
509
|
+
<BellIcon />
|
|
510
|
+
<CometChatNotificationBadge />
|
|
511
|
+
</button>
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
### useNotificationUnreadCount (hook)
|
|
517
|
+
|
|
518
|
+
React hook returning the current unread-notification count for the logged-in user. Use this when `<CometChatNotificationBadge />` doesn't fit your layout — gives you the raw number to render however you like.
|
|
519
|
+
|
|
520
|
+
**Signature:**
|
|
521
|
+
```tsx
|
|
522
|
+
import { useNotificationUnreadCount } from "@cometchat/chat-uikit-react";
|
|
523
|
+
|
|
524
|
+
const { count, isLoading } = useNotificationUnreadCount({ /* optional UseNotificationUnreadCountOptions */ });
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
Internally subscribes to the same notification stream as `CometChatNotificationBadge` — using both is safe (single shared source).
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
416
531
|
### CometChatEmojiKeyboard
|
|
417
532
|
|
|
418
533
|
A full emoji picker. Automatically rendered inside the message composer when the emoji button is clicked.
|
|
@@ -439,9 +554,9 @@ An AI chatbot interface that users can interact with for automated responses. Ty
|
|
|
439
554
|
|
|
440
555
|
**Prerequisites:** Enable "Conversation Starter" and/or "Smart Replies" in the dashboard.
|
|
441
556
|
|
|
442
|
-
**Usage:**
|
|
557
|
+
**Usage:** `user` is a **required** prop (the AI assistant user to chat with):
|
|
443
558
|
```tsx
|
|
444
|
-
<CometChatAIAssistantChat />
|
|
559
|
+
<CometChatAIAssistantChat user={assistantUser} />
|
|
445
560
|
```
|
|
446
561
|
|
|
447
562
|
---
|
|
@@ -459,13 +574,14 @@ Displays past AI assistant interactions. Used alongside `CometChatAIAssistantCha
|
|
|
459
574
|
|
|
460
575
|
### CometChatAIAssistantTools
|
|
461
576
|
|
|
462
|
-
|
|
577
|
+
⚠️ **This is a CLASS, not a renderable component.** You instantiate it with a map of action functions and pass it to `<CometChatAIAssistantChat>` via the `aiAssistantTools` prop — do NOT render `<CometChatAIAssistantTools />` (it's a type error).
|
|
463
578
|
|
|
464
579
|
**Prerequisites:** Enable "Conversation Summary" and/or other AI tools in the dashboard.
|
|
465
580
|
|
|
466
581
|
**Usage:**
|
|
467
582
|
```tsx
|
|
468
|
-
|
|
583
|
+
const toolkit = new CometChatAIAssistantTools({ /* actionsMap */ });
|
|
584
|
+
<CometChatAIAssistantChat user={assistantUser} aiAssistantTools={toolkit} />
|
|
469
585
|
```
|
|
470
586
|
|
|
471
587
|
> **Note:** For detailed props, configuration options, and customization of AI components, query the docs MCP — these components' APIs evolve with CometChat's AI feature releases.
|
|
@@ -615,10 +731,15 @@ import {
|
|
|
615
731
|
CometChatConversations,
|
|
616
732
|
CometChatMessageHeader,
|
|
617
733
|
CometChatMessageList,
|
|
618
|
-
|
|
734
|
+
CometChatCompactMessageComposer,
|
|
619
735
|
} from "@cometchat/chat-uikit-react";
|
|
620
736
|
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
621
737
|
|
|
738
|
+
// The message list must scroll inside a flex column without pushing the
|
|
739
|
+
// composer off-screen. Mirror the sample app's list wrapper.
|
|
740
|
+
// .cc-msg-list { flex: 1 1 0; min-height: 0; overflow: hidden; }
|
|
741
|
+
// .cc-msg-list > .cometchat { height: 100%; overflow: hidden; }
|
|
742
|
+
|
|
622
743
|
function MultiConversation() {
|
|
623
744
|
const [activeConversation, setActiveConversation] = useState<CometChat.Conversation>();
|
|
624
745
|
|
|
@@ -639,15 +760,19 @@ function MultiConversation() {
|
|
|
639
760
|
{selectedUser && (
|
|
640
761
|
<>
|
|
641
762
|
<CometChatMessageHeader user={selectedUser} />
|
|
642
|
-
<
|
|
643
|
-
|
|
763
|
+
<div className="cc-msg-list">
|
|
764
|
+
<CometChatMessageList user={selectedUser} />
|
|
765
|
+
</div>
|
|
766
|
+
<CometChatCompactMessageComposer user={selectedUser} />
|
|
644
767
|
</>
|
|
645
768
|
)}
|
|
646
769
|
{selectedGroup && (
|
|
647
770
|
<>
|
|
648
771
|
<CometChatMessageHeader group={selectedGroup} />
|
|
649
|
-
<
|
|
650
|
-
|
|
772
|
+
<div className="cc-msg-list">
|
|
773
|
+
<CometChatMessageList group={selectedGroup} />
|
|
774
|
+
</div>
|
|
775
|
+
<CometChatCompactMessageComposer group={selectedGroup} />
|
|
651
776
|
</>
|
|
652
777
|
)}
|
|
653
778
|
</div>
|
|
@@ -666,7 +791,7 @@ One chat window for a known user or group. No conversation list.
|
|
|
666
791
|
import {
|
|
667
792
|
CometChatMessageHeader,
|
|
668
793
|
CometChatMessageList,
|
|
669
|
-
|
|
794
|
+
CometChatCompactMessageComposer,
|
|
670
795
|
} from "@cometchat/chat-uikit-react";
|
|
671
796
|
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
672
797
|
|
|
@@ -675,15 +800,20 @@ interface SingleThreadProps {
|
|
|
675
800
|
group?: CometChat.Group;
|
|
676
801
|
}
|
|
677
802
|
|
|
803
|
+
// .cc-msg-list { flex: 1 1 0; min-height: 0; overflow: hidden; }
|
|
804
|
+
// .cc-msg-list > .cometchat { height: 100%; overflow: hidden; }
|
|
805
|
+
|
|
678
806
|
function SingleThread({ user, group }: SingleThreadProps) {
|
|
679
807
|
return (
|
|
680
808
|
<div style={{ display: "flex", flexDirection: "column", height: "100%" }}>
|
|
681
809
|
{user && <CometChatMessageHeader user={user} />}
|
|
682
810
|
{group && <CometChatMessageHeader group={group} />}
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
811
|
+
<div className="cc-msg-list">
|
|
812
|
+
{user && <CometChatMessageList user={user} />}
|
|
813
|
+
{group && <CometChatMessageList group={group} />}
|
|
814
|
+
</div>
|
|
815
|
+
{user && <CometChatCompactMessageComposer user={user} />}
|
|
816
|
+
{group && <CometChatCompactMessageComposer group={group} />}
|
|
687
817
|
</div>
|
|
688
818
|
);
|
|
689
819
|
}
|
|
@@ -717,10 +847,13 @@ import {
|
|
|
717
847
|
CometChatGroups,
|
|
718
848
|
CometChatMessageHeader,
|
|
719
849
|
CometChatMessageList,
|
|
720
|
-
|
|
850
|
+
CometChatCompactMessageComposer,
|
|
721
851
|
} from "@cometchat/chat-uikit-react";
|
|
722
852
|
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
723
853
|
|
|
854
|
+
// .cc-msg-list { flex: 1 1 0; min-height: 0; overflow: hidden; }
|
|
855
|
+
// .cc-msg-list > .cometchat { height: 100%; overflow: hidden; }
|
|
856
|
+
|
|
724
857
|
type Tab = "chats" | "calls" | "users" | "groups";
|
|
725
858
|
|
|
726
859
|
function FullMessenger() {
|
|
@@ -794,15 +927,19 @@ function FullMessenger() {
|
|
|
794
927
|
{selectedUser && (
|
|
795
928
|
<>
|
|
796
929
|
<CometChatMessageHeader user={selectedUser} />
|
|
797
|
-
<
|
|
798
|
-
|
|
930
|
+
<div className="cc-msg-list">
|
|
931
|
+
<CometChatMessageList user={selectedUser} />
|
|
932
|
+
</div>
|
|
933
|
+
<CometChatCompactMessageComposer user={selectedUser} />
|
|
799
934
|
</>
|
|
800
935
|
)}
|
|
801
936
|
{selectedGroup && (
|
|
802
937
|
<>
|
|
803
938
|
<CometChatMessageHeader group={selectedGroup} />
|
|
804
|
-
<
|
|
805
|
-
|
|
939
|
+
<div className="cc-msg-list">
|
|
940
|
+
<CometChatMessageList group={selectedGroup} />
|
|
941
|
+
</div>
|
|
942
|
+
<CometChatCompactMessageComposer group={selectedGroup} />
|
|
806
943
|
</>
|
|
807
944
|
)}
|
|
808
945
|
</div>
|
|
@@ -968,7 +1105,8 @@ User and group detail panels are **custom-built** — there is no pre-built `Com
|
|
|
968
1105
|
// Switch to 1:1 chat with this member
|
|
969
1106
|
}}
|
|
970
1107
|
/>
|
|
971
|
-
{/*
|
|
1108
|
+
{/* Banning is handled inside CometChatGroupMembers — there is no separate
|
|
1109
|
+
CometChatBannedMembers export in the v6 kit. */}
|
|
972
1110
|
</div>
|
|
973
1111
|
)}
|
|
974
1112
|
```
|