@cometchat/skills 4.4.2 → 5.0.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/.claude-plugin/marketplace.json +55 -0
- package/.claude-plugin/plugin.json +14 -0
- package/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/README.md +41 -163
- package/RULES.md +114 -0
- package/bin/cometchat-skills.mjs +1180 -0
- package/bin/legacy-skills.json +95 -0
- package/catalogs/android-v6.json +1646 -0
- package/catalogs/flutter-v6.json +651 -0
- package/catalogs/ios-v5.json +1383 -0
- package/catalogs/rn-calls-v5.json +134 -0
- package/catalogs/rn-calls-v5.symbols.txt +58 -0
- package/catalogs/rn-sdk-v4.json +672 -0
- package/catalogs/rn-v5.json +449 -0
- package/catalogs/rn-v5.symbols.txt +216 -0
- package/catalogs/sdk-android-v5.json +514 -0
- package/contracts.android-calls-v5.json +122 -0
- package/contracts.android-v6.json +135 -0
- package/contracts.angular-v5.json +694 -0
- package/contracts.flutter-calls-v5.json +77 -0
- package/contracts.flutter-v6.json +126 -0
- package/contracts.ios-calls-v5.json +67 -0
- package/contracts.ios-v5.json +436 -0
- package/contracts.json +82 -0
- package/contracts.rn-calls-v5.json +77 -0
- package/contracts.rn-v5.json +727 -0
- package/contracts.sdk-android-v5.json +15 -0
- package/contracts.web-calls-v5.json +45 -0
- package/features.android-calls-v5.json +246 -0
- package/features.android-v6.json +65 -0
- package/features.angular-v5.json +521 -0
- package/features.flutter-calls-v5.json +286 -0
- package/features.flutter-v6.json +484 -0
- package/features.ios-calls-v5.json +236 -0
- package/features.ios-v5.json +573 -0
- package/features.json +61 -0
- package/features.rn-calls-v5.json +187 -0
- package/features.rn-v5.json +614 -0
- package/features.sdk-android-v5.json +40 -0
- package/features.sdk-jsv4.json +24 -0
- package/features.web-calls-v5.json +108 -0
- package/package.json +151 -74
- package/peers.yaml +312 -0
- package/registry/README.md +31 -0
- package/registry/android-calls-v5.json +54 -0
- package/registry/android-v6.json +137 -0
- package/registry/angular-v5.json +114 -0
- package/registry/flutter-calls-v5.json +54 -0
- package/registry/flutter-v6.json +119 -0
- package/registry/ios-calls-v5.json +59 -0
- package/registry/ios-v5.json +97 -0
- package/registry/rn-calls-v5.json +59 -0
- package/registry/rn-v5.json +129 -0
- package/registry/sdk-android-v5.json +53 -0
- package/registry/sdk-jsv4.json +53 -0
- package/registry/web-calls-v5.json +54 -0
- package/registry/web-v7.json +99 -0
- package/skills/cometchat/SKILL.md +42 -2096
- package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
- package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
- package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
- package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
- package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
- package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
- package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
- package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
- package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
- package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
- package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
- package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
- package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
- package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
- package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
- package/skills/cometchat-android-v6-core/SKILL.md +236 -672
- package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
- package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
- package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
- package/skills/cometchat-android-v6-core/references/layout.md +112 -0
- package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
- package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
- package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
- package/skills/cometchat-android-v6-events/SKILL.md +46 -184
- package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
- package/skills/cometchat-android-v6-features/SKILL.md +74 -143
- package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
- package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
- package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
- package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
- package/skills/cometchat-android-v6-production/SKILL.md +40 -179
- package/skills/cometchat-android-v6-push/SKILL.md +39 -289
- package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
- package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
- package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
- package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
- package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
- package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
- package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
- package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
- package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
- package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
- package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
- package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
- package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
- package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
- package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
- package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
- package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
- package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
- package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
- package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
- package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
- package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
- package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
- package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
- package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
- package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
- package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
- package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
- package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
- package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
- package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
- package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
- package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
- package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
- package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
- package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
- package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
- package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
- package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
- package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
- package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
- package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
- package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
- package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
- package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
- package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
- package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
- package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
- package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
- package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
- package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
- package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
- package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
- package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
- package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
- package/skills/cometchat-ios-calls/SKILL.md +112 -563
- package/skills/cometchat-ios-components/SKILL.md +44 -834
- package/skills/cometchat-ios-core/SKILL.md +181 -1068
- package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
- package/skills/cometchat-ios-core/references/docs-map.md +123 -0
- package/skills/cometchat-ios-core/references/install.md +23 -0
- package/skills/cometchat-ios-core/references/layout.md +186 -0
- package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
- package/skills/cometchat-ios-core/references/swiftui.md +91 -0
- package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
- package/skills/cometchat-ios-customization/SKILL.md +33 -968
- package/skills/cometchat-ios-features/SKILL.md +29 -738
- package/skills/cometchat-ios-migration/SKILL.md +39 -0
- package/skills/cometchat-ios-placement/SKILL.md +51 -729
- package/skills/cometchat-ios-push/SKILL.md +24 -602
- package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
- package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
- package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
- package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
- package/skills/cometchat-onboarding/SKILL.md +89 -0
- package/skills/cometchat-onboarding/references/archetypes.md +51 -0
- package/skills/cometchat-onboarding/references/calling-first.md +77 -0
- package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
- package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
- package/skills/cometchat-onboarding/references/platforms.md +90 -0
- package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
- package/skills/cometchat-react-native-calls/SKILL.md +200 -0
- package/skills/cometchat-react-native-components/SKILL.md +142 -0
- package/skills/cometchat-react-native-core/SKILL.md +313 -0
- package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
- package/skills/cometchat-react-native-core/references/component-props.md +105 -0
- package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
- package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
- package/skills/cometchat-react-native-core/references/layout.md +61 -0
- package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
- package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
- package/skills/cometchat-react-native-customization/SKILL.md +198 -0
- package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
- package/skills/cometchat-react-native-features/SKILL.md +122 -0
- package/skills/cometchat-react-native-migration/SKILL.md +103 -0
- package/skills/cometchat-react-native-placement/SKILL.md +158 -0
- package/skills/cometchat-react-native-production/SKILL.md +78 -0
- package/skills/cometchat-react-native-push/SKILL.md +88 -0
- package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
- package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
- package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
- package/skills/cometchat-react-native-testing/SKILL.md +94 -0
- package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
- package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
- package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
- package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
- package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
- package/skills/cometchat-react-v7-components/SKILL.md +72 -0
- package/skills/cometchat-react-v7-core/SKILL.md +101 -0
- package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
- package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
- package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
- package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
- package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
- package/skills/cometchat-react-v7-core/references/layout.md +158 -0
- package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
- package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
- package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
- package/skills/cometchat-react-v7-core/references/theming.md +52 -0
- package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
- package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
- package/skills/cometchat-react-v7-features/SKILL.md +92 -0
- package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
- package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
- package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
- package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
- package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
- package/skills/cometchat-react-v7-push/SKILL.md +53 -0
- package/test-suite/README.md +70 -0
- package/test-suite/catalogs/android-calls-v5.json +830 -0
- package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
- package/test-suite/catalogs/android-v6.json +1646 -0
- package/test-suite/catalogs/android-v6.symbols.txt +298 -0
- package/test-suite/catalogs/angular-v5.json +7587 -0
- package/test-suite/catalogs/flutter-calls-v5.json +196 -0
- package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
- package/test-suite/catalogs/flutter-v6.json +651 -0
- package/test-suite/catalogs/ios-calls-v5.json +158 -0
- package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
- package/test-suite/catalogs/ios-v5.json +1383 -0
- package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
- package/test-suite/catalogs/rn-calls-v5.json +134 -0
- package/test-suite/catalogs/rn-sdk-v4.json +672 -0
- package/test-suite/catalogs/rn-v5.json +449 -0
- package/test-suite/catalogs/sdk-android-v5.json +514 -0
- package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
- package/test-suite/catalogs/sdk-jsv4.json +800 -0
- package/test-suite/catalogs/web-calls-v5.json +195 -0
- package/test-suite/catalogs/web-v7.json +1243 -0
- package/test-suite/scripts/build-registry.mjs +113 -0
- package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
- package/test-suite/scripts/catalog-refresh.mjs +100 -0
- package/test-suite/scripts/lint-skills.mjs +909 -0
- package/test-suite/scripts/measure-tokens.mjs +169 -0
- package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
- package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
- package/test-suite/scripts/typecheck-fences.mjs +206 -0
- package/test-suite/scripts/verify-catalog.mjs +242 -0
- package/test-suite/scripts/verify-contract-fences.mjs +94 -0
- package/test-suite/scripts/verify-detection.mjs +178 -0
- package/test-suite/scripts/verify-docs-base.mjs +91 -0
- package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
- package/test-suite/scripts/verify-golden-path.mjs +138 -0
- package/test-suite/scripts/verify-oracle-components.mjs +133 -0
- package/test-suite/scripts/verify-template-bindings.mjs +148 -0
- package/test-suite/typecheck/angular-v5/package.json +21 -0
- package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
- package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
- package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
- package/test-suite/typecheck/web-v7/package.json +18 -0
- package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
- package/bin/install.js +0 -1003
- package/skills/.claude-plugin/marketplace.json +0 -86
- package/skills/cometchat/references/asking-questions.md +0 -48
- package/skills/cometchat-a11y/SKILL.md +0 -477
- package/skills/cometchat-android-v5/SKILL.md +0 -121
- package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
- package/skills/cometchat-android-v5-calls/references/README.md +0 -53
- package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
- package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
- package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
- package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
- package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
- package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
- package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
- package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
- package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
- package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
- package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
- package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
- package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
- package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
- package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
- package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
- package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
- package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
- package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
- package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
- package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
- package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
- package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
- package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
- package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
- package/skills/cometchat-android-v5-components/SKILL.md +0 -431
- package/skills/cometchat-android-v5-core/SKILL.md +0 -486
- package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
- package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
- package/skills/cometchat-android-v5-features/SKILL.md +0 -131
- package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
- package/skills/cometchat-android-v5-production/SKILL.md +0 -95
- package/skills/cometchat-android-v5-push/SKILL.md +0 -619
- package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
- package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
- package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
- package/skills/cometchat-android-v6/SKILL.md +0 -108
- package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
- package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
- package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
- package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
- package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
- package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
- package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
- package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
- package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
- package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
- package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
- package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
- package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
- package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
- package/skills/cometchat-angular-calls/SKILL.md +0 -380
- package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
- package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
- package/skills/cometchat-angular-calls/references/call-session.md +0 -167
- package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
- package/skills/cometchat-angular-calls/references/device-management.md +0 -154
- package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
- package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
- package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
- package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
- package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
- package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
- package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
- package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
- package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
- package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
- package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
- package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
- package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
- package/skills/cometchat-angular-components/SKILL.md +0 -235
- package/skills/cometchat-angular-core/SKILL.md +0 -386
- package/skills/cometchat-angular-customization/SKILL.md +0 -616
- package/skills/cometchat-angular-features/SKILL.md +0 -329
- package/skills/cometchat-angular-patterns/SKILL.md +0 -256
- package/skills/cometchat-angular-placement/SKILL.md +0 -314
- package/skills/cometchat-angular-production/SKILL.md +0 -564
- package/skills/cometchat-angular-push/SKILL.md +0 -389
- package/skills/cometchat-angular-testing/SKILL.md +0 -605
- package/skills/cometchat-angular-theming/SKILL.md +0 -290
- package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
- package/skills/cometchat-astro-patterns/SKILL.md +0 -708
- package/skills/cometchat-calls/SKILL.md +0 -364
- package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
- package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
- package/skills/cometchat-calls/references/use-case-support.md +0 -189
- package/skills/cometchat-calls/references/use-case-team.md +0 -180
- package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
- package/skills/cometchat-components/SKILL.md +0 -1142
- package/skills/cometchat-core/SKILL.md +0 -1048
- package/skills/cometchat-customization/SKILL.md +0 -580
- package/skills/cometchat-customization/references/component-catalog.md +0 -236
- package/skills/cometchat-features/SKILL.md +0 -861
- package/skills/cometchat-flutter-v5/SKILL.md +0 -173
- package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
- package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
- package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
- package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
- package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
- package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
- package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
- package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
- package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
- package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
- package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
- package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
- package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
- package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
- package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
- package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
- package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
- package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
- package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
- package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
- package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
- package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
- package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
- package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
- package/skills/cometchat-flutter-v6/SKILL.md +0 -446
- package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
- package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
- package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
- package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
- package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
- package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
- package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
- package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
- package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
- package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
- package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
- package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
- package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
- package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
- package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
- package/skills/cometchat-i18n/SKILL.md +0 -419
- package/skills/cometchat-ios/SKILL.md +0 -325
- package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
- package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
- package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
- package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
- package/skills/cometchat-ios-calls/references/call-session.md +0 -218
- package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
- package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
- package/skills/cometchat-ios-calls/references/device-management.md +0 -171
- package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
- package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
- package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
- package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
- package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
- package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
- package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
- package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
- package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
- package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
- package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
- package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
- package/skills/cometchat-ios-production/SKILL.md +0 -738
- package/skills/cometchat-ios-testing/SKILL.md +0 -376
- package/skills/cometchat-ios-theming/SKILL.md +0 -667
- package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
- package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
- package/skills/cometchat-native-calls/SKILL.md +0 -671
- package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
- package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
- package/skills/cometchat-native-calls/references/call-session.md +0 -182
- package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
- package/skills/cometchat-native-calls/references/device-management.md +0 -158
- package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
- package/skills/cometchat-native-calls/references/group-calls.md +0 -296
- package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
- package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
- package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
- package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
- package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
- package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
- package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
- package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
- package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
- package/skills/cometchat-native-calls/references/share-invite.md +0 -146
- package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
- package/skills/cometchat-native-components/SKILL.md +0 -628
- package/skills/cometchat-native-core/SKILL.md +0 -679
- package/skills/cometchat-native-customization/SKILL.md +0 -716
- package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
- package/skills/cometchat-native-features/SKILL.md +0 -638
- package/skills/cometchat-native-placement/SKILL.md +0 -509
- package/skills/cometchat-native-production/SKILL.md +0 -700
- package/skills/cometchat-native-push/SKILL.md +0 -594
- package/skills/cometchat-native-testing/SKILL.md +0 -582
- package/skills/cometchat-native-theming/SKILL.md +0 -681
- package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
- package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
- package/skills/cometchat-placement/SKILL.md +0 -1360
- package/skills/cometchat-production/SKILL.md +0 -1027
- package/skills/cometchat-react-calls/SKILL.md +0 -752
- package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
- package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
- package/skills/cometchat-react-calls/references/call-session.md +0 -235
- package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
- package/skills/cometchat-react-calls/references/device-management.md +0 -210
- package/skills/cometchat-react-calls/references/group-calls.md +0 -257
- package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
- package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
- package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
- package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
- package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
- package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
- package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
- package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
- package/skills/cometchat-react-calls/references/share-invite.md +0 -175
- package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
- package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
- package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
- package/skills/cometchat-react-patterns/SKILL.md +0 -628
- package/skills/cometchat-react-push/SKILL.md +0 -634
- package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
- package/skills/cometchat-react-testing/SKILL.md +0 -413
- package/skills/cometchat-theming/SKILL.md +0 -498
- package/skills/cometchat-troubleshooting/SKILL.md +0 -294
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# dependencies — the exact React Native peer set
|
|
2
|
+
|
|
3
|
+
Verified against `@cometchat/chat-uikit-react-native@5.4.0` `package.json` + the integration pages.
|
|
4
|
+
**Take this list verbatim — do not infer it.** A missing native module fails at **mount**, not at
|
|
5
|
+
build, and the error names the peer (`gesture-handler`, `svg`, `video`), never CometChat.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @cometchat/chat-uikit-react-native@5 @cometchat/chat-sdk-react-native@4
|
|
9
|
+
npm install @react-native-clipboard/clipboard \
|
|
10
|
+
react-native-svg react-native-video react-native-localize react-native-gesture-handler \
|
|
11
|
+
react-native-safe-area-context @react-native-async-storage/async-storage@^2.1.2 dayjs
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**Expo also needs `punycode`.** Bare RN then needs `cd ios && pod install`; Expo needs a fresh
|
|
15
|
+
development build (`npx expo run:ios`) — **Expo Go cannot load custom native modules.**
|
|
16
|
+
|
|
17
|
+
## Native config that is NOT optional
|
|
18
|
+
|
|
19
|
+
| Platform | Requirement | Failure if missed |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| bare RN, iOS | two `modular_headers` lines in `ios/Podfile` (below) | **`pod install` fails outright** |
|
|
22
|
+
| bare RN, both | `import 'react-native-gesture-handler'` as the **first line of `index.js`** | works in debug, **crashes in release** |
|
|
23
|
+
| Expo | permissions in `app.json` (never in `ios/`/`android/` — prebuild overwrites them) | permission prompts never appear |
|
|
24
|
+
|
|
25
|
+
```ruby title="ios/Podfile"
|
|
26
|
+
target 'YourApp' do
|
|
27
|
+
pod 'SPTPersistentCache', :modular_headers => true
|
|
28
|
+
pod 'DVAssetLoaderDelegate', :modular_headers => true
|
|
29
|
+
# …
|
|
30
|
+
end
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The kit is a **Swift** pod depending on two pods that define no module, so a static-library build —
|
|
34
|
+
the RN default — cannot link it. Both official CometChat sample apps carry exactly these two lines;
|
|
35
|
+
the integration docs do not mention them (**RN-G14**).
|
|
36
|
+
|
|
37
|
+
## Optional — calling
|
|
38
|
+
```bash
|
|
39
|
+
npm install @cometchat/calls-sdk-react-native@5
|
|
40
|
+
# 6 REQUIRED peer deps — the calls SDK's declared peerDependencies. Pinned; do NOT float them.
|
|
41
|
+
npm install @react-native-async-storage/async-storage@^2.1.2 react-native-background-timer@^2.4.1 \
|
|
42
|
+
react-native-performance@^5.1.2 react-native-svg@^15.12.0 react-native-url-polyfill@2.0.0 \
|
|
43
|
+
react-native-webrtc@124.0.7
|
|
44
|
+
```
|
|
45
|
+
⚠️ **Not** `@cometchat/calls-sdk-javascript` — that is the web package.
|
|
46
|
+
⚠️ **`react-native-url-polyfill` + `react-native-performance` are BUNDLE-critical**, not runtime-optional:
|
|
47
|
+
the UIKit does a module-scope `require("@cometchat/calls-sdk-react-native")` (`CallingPackage.ts`), so
|
|
48
|
+
Metro resolves the calls SDK's peers even for a **chat-only** build — if the calls SDK is present in
|
|
49
|
+
`package.json`, a missing `url-polyfill`/`performance` fails the Metro bundle with "Unable to resolve module".
|
|
50
|
+
⚠️ Keep `react-native-performance` on **5.x** — 6.x is published and a floated `^6` makes every later
|
|
51
|
+
`npm install` fail with ERESOLVE. (`@react-native-community/netinfo` and `react-native-callstats` are
|
|
52
|
+
NOT declared peers of the calls SDK — do not add them for calling.)
|
|
53
|
+
Floors: Android `minSdkVersion 24`, iOS deployment target `13.0` (the calls SDK podspec requires 13.0). Below them the build fails.
|
|
54
|
+
|
|
55
|
+
## Version floors
|
|
56
|
+
React Native **0.77+**. `@cometchat/chat-sdk-react-native@4` requires
|
|
57
|
+
`@react-native-async-storage/async-storage` (it ships as a direct dependency, but autolinking needs
|
|
58
|
+
it present and pod-installed).
|
|
59
|
+
|
|
60
|
+
## After any native change — rebuild
|
|
61
|
+
Metro reload only refreshes JavaScript. A new native module, a Gradle edit or a plist change needs a
|
|
62
|
+
full rebuild. "I installed it and nothing changed" is almost always a missed rebuild.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# docs-map — CometChat React Native v5: intent → the exact docs page to fetch
|
|
2
|
+
|
|
3
|
+
## Reaching docs — PREFER the CometChat docs MCP; fetch is the fallback
|
|
4
|
+
The canonical doc channel is the **first-party CometChat docs MCP** — tools `search_cometchat_docs`,
|
|
5
|
+
`fetch_cometchat_doc_page`, and `get_cometchat_implementation_bundle`. **If those tools are connected,
|
|
6
|
+
use them instead of a raw web fetch:**
|
|
7
|
+
- **Find the page** → `search_cometchat_docs(query, version?)` — replaces browsing the scoped `llms-*` index.
|
|
8
|
+
- **Read the page** → `fetch_cometchat_doc_page(path)` — pass the SAME `<path>` the tables below list
|
|
9
|
+
(the conversations page path for your platform); the MCP resolves the `.md` twin and returns raw Markdown.
|
|
10
|
+
A full `https://…/docs/<path>` URL also works.
|
|
11
|
+
- **A whole feature/recipe** → `get_cometchat_implementation_bundle(...)` is **NON-AUTHORITATIVE** — curated STATIC recipes that can lag the live docs (verified stale vs v7: e.g. `CometChatConversationsWithMessages`, `css-variables.css`). Treat any bundle as a hint only: RECONCILE it against the `fetch_cometchat_doc_page` result + the pack's hardening; never emit bundle code verbatim.
|
|
12
|
+
|
|
13
|
+
The MCP reads whatever docs environment it is pointed at (production by default; a preview when repointed),
|
|
14
|
+
so it also carries the environment-swap concern below — no hardcoded host on the skill side.
|
|
15
|
+
|
|
16
|
+
**If the MCP tools are NOT connected:** add it (`claude mcp add --transport http cometchat-docs https://mcp.cometchat.com/mcp`, or reinstall/enable the plugin) and retry; only if it still will not connect, fall back to a plain fetch via `DOCS_BASE` (defined next).
|
|
17
|
+
Either way the `<path>` catalog in this file is the source of truth for WHICH page — MCP-vs-fetch is only HOW.
|
|
18
|
+
|
|
19
|
+
## DOCS_BASE — the fetch FALLBACK entry point (⚠️ SWAP HERE to change environments)
|
|
20
|
+
```
|
|
21
|
+
DOCS_BASE = https://www.cometchat.com/docs
|
|
22
|
+
```
|
|
23
|
+
> **Fetch rule:** always build a URL as `DOCS_BASE` + the path shown, then append `.md`.
|
|
24
|
+
> Never hardcode a host anywhere else; never read `node_modules`/`.d.ts`.
|
|
25
|
+
|
|
26
|
+
## The convention
|
|
27
|
+
`DOCS_BASE` + `<path>` + `.md` → raw Markdown (verbatim code + an "AI Integration Quick Reference"
|
|
28
|
+
block: package, peers, key props/methods). 51 of 56 RN pages carry that block — read it FIRST.
|
|
29
|
+
```
|
|
30
|
+
Fetch: {DOCS_BASE}/ui-kit/react-native/message-list.md
|
|
31
|
+
```
|
|
32
|
+
Fallback order: `.md` twin → if it 404s, the same URL **without** `.md` (HTML) → **never** a `.d.ts`.
|
|
33
|
+
|
|
34
|
+
## Scoped React Native index (prefer over the global llms.txt)
|
|
35
|
+
```
|
|
36
|
+
{DOCS_BASE}/ui-kit/react-native/llms-react-native-v5.md
|
|
37
|
+
```
|
|
38
|
+
A React-Native-v5-only index of every page as a `.md` link (~3k tok) — use it to discover any page
|
|
39
|
+
not in the table below. Global all-products index (large, ~25k tok; last resort): `{DOCS_BASE}/llms.txt`.
|
|
40
|
+
|
|
41
|
+
## SDK docs — the FALLBACK reference (a feature the UI Kit has NO component for)
|
|
42
|
+
The rule of the pack: **for every feature, first check whether the UI Kit has a component/prop for it**
|
|
43
|
+
(this file's table + the catalog). **If it does — USE it. If it does NOT — drop to the React Native
|
|
44
|
+
Chat SDK** and call its methods directly (the SDK is already installed under the UI Kit; init/login
|
|
45
|
+
already use it). Look the method up — never guess:
|
|
46
|
+
```
|
|
47
|
+
SDK_DOCS_BASE = https://www.cometchat.com/docs
|
|
48
|
+
```
|
|
49
|
+
- **SDK index (scoped — PREFER this):** `{SDK_DOCS_BASE}/sdk/react-native/llms-react-native-v4.md` —
|
|
50
|
+
a **React-Native-SDK-v4-only** routing index grouped by area (Messaging · Calling · Users · Groups ·
|
|
51
|
+
AI & campaigns · Listeners · Key Concepts). Start here to find the feature's page.
|
|
52
|
+
**Do NOT use the site-wide global `llms.txt`** except as a last resort.
|
|
53
|
+
- **Convention:** `{SDK_DOCS_BASE}/sdk/react-native/<page>` + `.md`.
|
|
54
|
+
- ⚠️ **RN has its OWN SDK.** It is `@cometchat/chat-sdk-react-native@4`, **not**
|
|
55
|
+
`@cometchat/chat-sdk-javascript`. Never fetch `/sdk/javascript/*` for a React Native task.
|
|
56
|
+
|
|
57
|
+
### SDK-fallback features (kit v5 ships NO component — this is not optional depth)
|
|
58
|
+
| Need | No component because | SDK path |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| user / group details screen | kit v5 removed `CometChatDetails` | `/sdk/react-native/groups-overview` → `CometChat.getUser` / `getGroup` |
|
|
61
|
+
| add members | kit v5 removed `CometChatAddMembers` | `/sdk/react-native/group-add-members` → `addMembersToGroup` |
|
|
62
|
+
| **banned members (view + unban)** | **no UI surface at all in v5** | `/sdk/react-native/group-kick-ban-members` → `BannedMembersRequestBuilder`, `unbanGroupMember` |
|
|
63
|
+
| transfer ownership | kit v5 removed `CometChatTransferOwnership` | `/sdk/react-native/transfer-group-ownership` |
|
|
64
|
+
| call log detail / history / participants | kit v5 keeps only the list | **calls** SDK → `CometChatCalls.CallLogRequestBuilder` |
|
|
65
|
+
|
|
66
|
+
> An app that can **ban** but cannot **view or unban** is an unclosed round-trip — ship the pair.
|
|
67
|
+
|
|
68
|
+
### PATTERN SOURCE for the above — the official sample app
|
|
69
|
+
The kit has no component, so do **not** invent a layout. Cite the real implementation:
|
|
70
|
+
`github.com/cometchat/cometchat-uikit-react-native/tree/v5/examples/SampleApp`
|
|
71
|
+
(e.g. `src/components/CometChatDetails/CometChatUserDetails.tsx`).
|
|
72
|
+
⚠️ Those are sample-app **directory paths**, not kit exports — never `import` them.
|
|
73
|
+
|
|
74
|
+
## Don't fetch the hot path — it's baked
|
|
75
|
+
Install, the provider chain, `init → login → render`, and the drop-in props for "add chat" are BAKED
|
|
76
|
+
in `cometchat-react-native-core`. Fetch ONLY for exhaustive props, long-tail components, theming
|
|
77
|
+
tokens, or feature enablement.
|
|
78
|
+
|
|
79
|
+
## The 80% trigger table (URL = `{DOCS_BASE}` + path, then append `.md`)
|
|
80
|
+
| Intent | Path (append `.md`) |
|
|
81
|
+
|---|---|
|
|
82
|
+
| setup / init / login (bare RN) | `/ui-kit/react-native/react-native-cli-integration` |
|
|
83
|
+
| setup (Expo) | `/ui-kit/react-native/expo-integration` |
|
|
84
|
+
| conversation list (full props) | `/ui-kit/react-native/conversations` |
|
|
85
|
+
| message list | `/ui-kit/react-native/message-list` |
|
|
86
|
+
| message composer | `/ui-kit/react-native/message-composer` |
|
|
87
|
+
| compact composer | `/ui-kit/react-native/compact-message-composer` |
|
|
88
|
+
| message header | `/ui-kit/react-native/message-header` |
|
|
89
|
+
| users / groups / group members | `/ui-kit/react-native/users` · `groups` · `group-members` |
|
|
90
|
+
| threads | `/ui-kit/react-native/threaded-messages-header` |
|
|
91
|
+
| theming / tokens / dark mode | `/ui-kit/react-native/theme` · `colors` · `component-styling` |
|
|
92
|
+
| localization | `/ui-kit/react-native/localize` |
|
|
93
|
+
| events | `/ui-kit/react-native/events` |
|
|
94
|
+
| calls (UI) | `/ui-kit/react-native/calling-integration` · `call-features` · `call-buttons` · `call-logs` · `incoming-call` · `outgoing-call` |
|
|
95
|
+
| AI / smart replies | `/ui-kit/react-native/ai-features` |
|
|
96
|
+
| full-screen recipes | `/ui-kit/react-native/react-native-conversation` · `expo-conversation` |
|
|
97
|
+
| task guides | `/ui-kit/react-native/guide-new-chat` · `guide-group-chat` · `guide-search-messages` · `guide-threaded-messages` · `guide-block-unblock-user` · `guide-message-privately` |
|
|
98
|
+
|
|
99
|
+
## ⚠️ DOCS-GAP protocol — flag, never silently source-fill
|
|
100
|
+
If a needed component/prop/SDK method is NOT covered by the docs, **FLAG it for the developer**
|
|
101
|
+
(page · section · change · reason) and record it. Do **not** quietly read the kit source and bake the
|
|
102
|
+
answer as if it were documented — that hides the gap and the next agent re-derives it.
|
|
103
|
+
|
|
104
|
+
**Known open gaps for React Native (tracked on ENG-38205 as `RN-G*`):** no `components/search` page ·
|
|
105
|
+
reactions undocumented · no per-bubble pages · attachment cluster undocumented · `ConversationStarter`
|
|
106
|
+
/ `SmartReplies` undocumented · the `DataSourceDecorator` chain undocumented · six pages **import
|
|
107
|
+
symbols the kit does not export** · the events page names APIs that do not exist.
|
|
108
|
+
Until those land, build from the catalog + kit source **and say so in the flag**.
|
|
109
|
+
|
|
110
|
+
## ⚠️ Names that differ from the React docs — never port a React snippet
|
|
111
|
+
The React UI Kit is a different package with a different API. Verified against
|
|
112
|
+
`@cometchat/chat-uikit-react-native@5.4.0`:
|
|
113
|
+
|
|
114
|
+
| React (do NOT use on RN) | React Native |
|
|
115
|
+
|---|---|
|
|
116
|
+
| `new UIKitSettingsBuilder()…build()` | a plain `UIKitSettings` **object** — there is no builder export |
|
|
117
|
+
| `CometChatUIKit.login(uid)` | `CometChatUIKit.login({ uid })` — an **object** |
|
|
118
|
+
| `CometChatMessagePlugin` / `PluginRegistry` | `ChatConfigurator.enable(...)` + a `DataSourceDecorator` subclass |
|
|
119
|
+
| `CometChatUrlFormatter` | `CometChatUrlsFormatter` (**plural**) |
|
|
120
|
+
| `CometChatCollaborativeWhiteboardBubble` | `CometChatCollaborativeWhiteBoardBubble` (**capital B**) |
|
|
121
|
+
| `CometChatFlagMessageDialog` | `CometChatReportDialog` |
|
|
122
|
+
| `CometChatErrorBoundary` | none — use a plain React error boundary |
|
|
123
|
+
| `CometChatThreadHeader` (same name, web layout) | same name, but it is a **screen**, not a side panel |
|
|
124
|
+
| CSS variables / `--cometchat-*` | `CometChatThemeProvider` + `useTheme()` |
|
|
125
|
+
|
|
126
|
+
| custom message type (decorator) | [message-list]({DOCS_BASE}/ui-kit/react-native/message-list.md) — "Filtering Messages" | The FETCH half (`getAllMessageTypes` / `getAllMessageCategories`) and the after-`login()` registration order. Overriding only `getAllMessageTemplates` renders a bubble that vanishes on reload. |
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# layout — the React Native sizing standard
|
|
2
|
+
|
|
3
|
+
`contracts.rn-v5.json` gates four capabilities on this file: `flex-fill-screen-height` ·
|
|
4
|
+
`flex-min-height-0` · `safe-area-ancestor-chain` · `keyboard-avoidance`. The **principle** is the
|
|
5
|
+
same as web — the kit fills its container and must not reflow between loading and loaded — but the
|
|
6
|
+
**recipe** is entirely different.
|
|
7
|
+
|
|
8
|
+
## There is no viewport unit, and no CSS
|
|
9
|
+
`100dvh`, `min-height`, `vh`, media queries: none exist. Height comes from **flex**, and the frame
|
|
10
|
+
resizes when the keyboard opens.
|
|
11
|
+
|
|
12
|
+
## The four invariants
|
|
13
|
+
|
|
14
|
+
### 1. Every ancestor is `flex: 1`
|
|
15
|
+
A kit component fills its parent. A parent with no height collapses it to **zero** — and on RN a
|
|
16
|
+
zero-size view still **exists in the tree**, so it is `toExist` but not `toBeVisible`. That is why
|
|
17
|
+
the Detox specs assert visibility, never existence.
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
<View style={{ flex: 1 }}>
|
|
21
|
+
<CometChatMessageList user={user} />
|
|
22
|
+
</View>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 2. A scrolling column also needs `minHeight: 0`
|
|
26
|
+
Without it the child grows instead of scrolling, and the composer is pushed off-screen.
|
|
27
|
+
|
|
28
|
+
### 3. The provider chain order is load-bearing
|
|
29
|
+
Outermost first — verified against the integration and recipe pages:
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
<GestureHandlerRootView style={{ flex: 1 }}> {/* OUTERMOST, and flex:1 */}
|
|
33
|
+
<SafeAreaProvider>
|
|
34
|
+
<CometChatI18nProvider>
|
|
35
|
+
<SafeAreaView style={{ flex: 1 }}>
|
|
36
|
+
<CometChatThemeProvider>{/* screens */}</CometChatThemeProvider>
|
|
37
|
+
</SafeAreaView>
|
|
38
|
+
</CometChatI18nProvider>
|
|
39
|
+
</SafeAreaProvider>
|
|
40
|
+
</GestureHandlerRootView>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Omit `GestureHandlerRootView` and gestures silently stop working** — no error, no warning. Swipe
|
|
44
|
+
and long-press simply do nothing. It is the single most common "renders but doesn't respond" cause.
|
|
45
|
+
|
|
46
|
+
### 4. The composer must survive the keyboard
|
|
47
|
+
A fixed pixel height anywhere in the chain breaks when the soft keyboard opens. Verify with the
|
|
48
|
+
keyboard **up**, on a device — a simulator's hardware keyboard can hide the problem.
|
|
49
|
+
|
|
50
|
+
## No side panels — one screen per route
|
|
51
|
+
The web kit toggles panels with state. On a phone every surface is its own screen on a stack
|
|
52
|
+
navigator, with the OS back button. Search, threads and members are **pushed screens**. Details in
|
|
53
|
+
the `placement` skill.
|
|
54
|
+
|
|
55
|
+
## Anti-patterns
|
|
56
|
+
| Don't | Why |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `height: 600` on a chat container | breaks on keyboard open and on every other device size |
|
|
59
|
+
| a `ScrollView` wrapping `CometChatMessageList` | the list scrolls itself; nesting breaks both |
|
|
60
|
+
| `NavigationContainer` outside the providers | screens mount unthemed |
|
|
61
|
+
| the message screen inside the tab navigator | the tab bar overlaps the composer |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# lifecycle — init → login → render on React Native
|
|
2
|
+
|
|
3
|
+
## The invariant
|
|
4
|
+
**`init()` must resolve before `login()`. `login()` must resolve before any component renders.**
|
|
5
|
+
Out of order fails **silently** — a blank screen, no exception.
|
|
6
|
+
|
|
7
|
+
## Init with `initFromSettings` (not the classic init)
|
|
8
|
+
`initFromSettings` persists `integrationSource="ai-agent"` for telemetry attribution; the classic
|
|
9
|
+
`init` does not (AUDIT-084), and a machine gate enforces this.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { CometChatUIKit } from "@cometchat/chat-uikit-react-native";
|
|
13
|
+
import { CometChat } from "@cometchat/chat-sdk-react-native";
|
|
14
|
+
|
|
15
|
+
const settings: CometChat.CometChatSettings = {
|
|
16
|
+
appId: APP_ID,
|
|
17
|
+
region: REGION,
|
|
18
|
+
credentials: { authKey: AUTH_KEY }, // dev only
|
|
19
|
+
chatSDK: {
|
|
20
|
+
presenceSubscription: { type: "ALL_USERS" },
|
|
21
|
+
autoEstablishSocketConnection: true,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Presence lives **inside** `chatSDK.presenceSubscription.type` — not a top-level field, and not a
|
|
27
|
+
builder call. There is no `UIKitSettingsBuilder` in RN.
|
|
28
|
+
|
|
29
|
+
## Guard the boot so it runs once
|
|
30
|
+
React re-renders, remounts and Fast Refresh can all fire the effect again. Two `login()` calls race
|
|
31
|
+
and the second can reject. Cache the **promise**, not a boolean:
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
let boot: Promise<void> | null = null;
|
|
35
|
+
|
|
36
|
+
export function ensureReady() {
|
|
37
|
+
if (!boot) {
|
|
38
|
+
boot = (async () => {
|
|
39
|
+
await CometChatUIKit.initFromSettings(settings);
|
|
40
|
+
await CometChatUIKit.login({ uid: UID }); // ({ authToken }) in production
|
|
41
|
+
})();
|
|
42
|
+
}
|
|
43
|
+
return boot;
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
A boolean flag does **not** work: the second caller sees `false` while the first is still awaiting.
|
|
48
|
+
|
|
49
|
+
## Gate the render
|
|
50
|
+
```tsx
|
|
51
|
+
const [ready, setReady] = useState(false);
|
|
52
|
+
useEffect(() => { ensureReady().then(() => setReady(true)).catch(console.error); }, []);
|
|
53
|
+
if (!ready) return null; // or your own splash
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Rendering before `ready` gives the blank screen above.
|
|
57
|
+
|
|
58
|
+
## Logout order
|
|
59
|
+
**Unregister the push token first**, then `CometChatUIKit.logout()`. Reversed, the device keeps
|
|
60
|
+
receiving the previous user's notifications — a privacy incident on a shared device, not a bug.
|
|
61
|
+
|
|
62
|
+
## `login` is untyped — TypeScript will not help
|
|
63
|
+
`login(...args: any)` in the `.d.ts`. The two real shapes are `login({ uid })` and
|
|
64
|
+
`login({ authToken })`. A wrong call compiles and fails at runtime.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# setup-credentials — App ID, Region, Auth Key on React Native
|
|
2
|
+
|
|
3
|
+
## The three values
|
|
4
|
+
From the CometChat dashboard: **App ID** · **Region** (`us` / `eu` / `in`) · **Auth Key**.
|
|
5
|
+
They go into `CometChat.CometChatSettings` — see `lifecycle.md`.
|
|
6
|
+
|
|
7
|
+
## Nothing in a mobile bundle is secret
|
|
8
|
+
This is the part web habits get wrong. A React Native bundle is **not** a server:
|
|
9
|
+
|
|
10
|
+
`.env` files · `react-native-config` · `Constants.expoConfig` · obfuscation · ProGuard —
|
|
11
|
+
**every one ends up readable in the shipped app.** Anyone can unzip an IPA or APK.
|
|
12
|
+
|
|
13
|
+
So "hide the Auth Key in an env var" is not a mitigation. It changes nothing.
|
|
14
|
+
|
|
15
|
+
## Dev vs production
|
|
16
|
+
|
|
17
|
+
| | Dev | Production |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| Login | `login({ uid })` with the Auth Key in settings | `login({ authToken })` |
|
|
20
|
+
| Auth Key ships? | acceptable locally | **never** |
|
|
21
|
+
| Token source | — | your backend mints a short-lived, per-user, revocable token |
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
const authToken = await fetchAuthTokenFromYourBackend();
|
|
25
|
+
await CometChatUIKit.login({ authToken });
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
A production build should not carry `credentials.authKey` at all.
|
|
29
|
+
|
|
30
|
+
## Which UID to log in as
|
|
31
|
+
Use a UID that **already exists** in your dashboard app. The CometChat sample apps seed
|
|
32
|
+
`cometchat-uid-1` … `cometchat-uid-5`. **Never invent one** — login fails with a confusing error,
|
|
33
|
+
and it looks like a credential problem rather than a missing user.
|
|
34
|
+
|
|
35
|
+
Creating users needs the Auth Key, so `CometChat.createUser` is a **backend** call made when your own
|
|
36
|
+
signup completes. A client that can create users can create *any* user.
|
|
37
|
+
|
|
38
|
+
## Verify before shipping
|
|
39
|
+
Build a **release** bundle, then grep it for the Auth Key. It must not be present.
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cometchat-react-native-customization
|
|
3
|
+
description: "Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types. Triggers: change CometChat colors React Native, dark mode RN chat, custom message bubble RN, brand the RN chat UI, custom message type React Native, restyle the message bubble, change the chat font, add a custom bubble RN."
|
|
4
|
+
license: "MIT"
|
|
5
|
+
compatibility: "React Native >=0.77; @cometchat/chat-uikit-react-native ^5.4.0"
|
|
6
|
+
metadata:
|
|
7
|
+
author: "CometChat"
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "chat cometchat react-native customization theming styling datasource decorator"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
> **Ground truth:** `@cometchat/chat-uikit-react-native@5` + catalog `rn-v5.json`.
|
|
13
|
+
> Docs: `/ui-kit/react-native/theme` · `colors` · `component-styling` · `message-bubble-styling`.
|
|
14
|
+
> Fetch token names and style keys from docs — never invent them.
|
|
15
|
+
|
|
16
|
+
## Companion skills (read first)
|
|
17
|
+
- `cometchat-react-native-core` — install, provider chain, init→login→render. Assumed, not repeated here.
|
|
18
|
+
|
|
19
|
+
## Use this skill when
|
|
20
|
+
- "change the chat colors" · "brand the chat UI" · "dark mode" · "restyle the bubbles"
|
|
21
|
+
- "custom message type" · "render my own bubble" · "add an option to the message menu"
|
|
22
|
+
|
|
23
|
+
## Prerequisites & install
|
|
24
|
+
None beyond `core`. Theming needs `CometChatThemeProvider` already in the chain (see `core`).
|
|
25
|
+
|
|
26
|
+
## Customization mechanism — three layers, cheapest first
|
|
27
|
+
|
|
28
|
+
**There is no CSS.** No stylesheets, no `className`, no `--cometchat-*` variables. If you are
|
|
29
|
+
holding a React snippet with CSS custom properties, it does not apply here.
|
|
30
|
+
|
|
31
|
+
### Layer 1 — theme mode + color tokens (whole app)
|
|
32
|
+
The provider takes a `theme` prop shaped `{ mode, light, dark }`. `mode` is `"light"` · `"dark"` ·
|
|
33
|
+
`"auto"` — **`"auto"` is what makes the kit follow the device (OS) light/dark setting** (it reads
|
|
34
|
+
`useColorScheme()`); the provider default is already `"auto"`.
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
// Fixed dark for the whole app.
|
|
38
|
+
<CometChatThemeProvider theme={{ mode: "dark" }}>{/* … */}</CometChatThemeProvider>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
// Follow the OS, branded in BOTH schemes. mode:"auto" is the switch;
|
|
43
|
+
// set BOTH light and dark or dark falls back to defaults.
|
|
44
|
+
<CometChatThemeProvider
|
|
45
|
+
theme={{
|
|
46
|
+
mode: "auto",
|
|
47
|
+
light: { color: { primary: "#F76808" } },
|
|
48
|
+
dark: { color: { primary: "#F8935B" } },
|
|
49
|
+
}}
|
|
50
|
+
>
|
|
51
|
+
{/* … */}
|
|
52
|
+
</CometChatThemeProvider>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
`primary` drives buttons, outgoing bubbles and active states — it is usually the only token a brand
|
|
56
|
+
change needs. Other common tokens: `textPrimary`, `background1`, `neutral50`, `extendedPrimary500`.
|
|
57
|
+
**Fetch the full list** from `/ui-kit/react-native/colors.md` rather than guessing a token name.
|
|
58
|
+
|
|
59
|
+
To follow the OS, use **`mode: "auto"`** and set both `light` and `dark`. Without the provider,
|
|
60
|
+
system theme changes are not reflected at all.
|
|
61
|
+
|
|
62
|
+
### Layer 2 — per-component style objects
|
|
63
|
+
Every component takes a `style` prop holding named sub-style objects — plain RN style objects,
|
|
64
|
+
not CSS:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
<CometChatConversations style={{ containerStyle: { backgroundColor: "#F7F7F7" } }} />
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The same style keys can be set globally through the theme instead, which is preferable when the
|
|
71
|
+
change should apply everywhere:
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
<CometChatThemeProvider theme={{ light: { conversationStyles: { /* … */ } } }}>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Style-key names differ per component. Fetch them from that component's page
|
|
78
|
+
(`/ui-kit/react-native/component-styling.md` and the component's own page) — do not pattern-match
|
|
79
|
+
from another component.
|
|
80
|
+
|
|
81
|
+
### Layer 3 — read the active theme in your own views
|
|
82
|
+
`useTheme()` returns the **resolved** theme (already light-or-dark per `mode`), so custom views match
|
|
83
|
+
the kit without re-deriving the palette:
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
import { useTheme } from "@cometchat/chat-uikit-react-native";
|
|
87
|
+
import { Text } from "react-native";
|
|
88
|
+
|
|
89
|
+
const Label = () => {
|
|
90
|
+
const theme = useTheme();
|
|
91
|
+
return <Text style={{ color: theme.color.textPrimary }}>Chats</Text>;
|
|
92
|
+
};
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Custom message types — the DataSource decorator chain
|
|
96
|
+
|
|
97
|
+
⚠️ **RN does NOT have the React plugin API.** `CometChatMessagePlugin` and `CometChatPluginRegistry`
|
|
98
|
+
do not exist in this kit; emitting them will not compile. RN uses a decorator chain.
|
|
99
|
+
|
|
100
|
+
Extend `DataSourceDecorator`, override what you need, and register it with `ChatConfigurator.enable`:
|
|
101
|
+
|
|
102
|
+
```tsx
|
|
103
|
+
import {
|
|
104
|
+
ChatConfigurator, DataSourceDecorator, CometChatMessageTemplate,
|
|
105
|
+
} from "@cometchat/chat-uikit-react-native";
|
|
106
|
+
|
|
107
|
+
const ORDER_TYPE = "order";
|
|
108
|
+
|
|
109
|
+
class OrderDataSource extends DataSourceDecorator {
|
|
110
|
+
// 0. IDENTITY — REQUIRED. The base DataSourceDecorator.getId() THROWS
|
|
111
|
+
// ("Method not implemented.") and ChatConfigurator.enable() calls getId() to
|
|
112
|
+
// dedupe the registry — so a subclass without this override crashes at
|
|
113
|
+
// ChatConfigurator.enable(...), NOT at render. Return a stable, unique id.
|
|
114
|
+
getId(): string {
|
|
115
|
+
return "order_message_datasource";
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 1. RENDER — how the bubble draws.
|
|
119
|
+
getAllMessageTemplates(theme?: any, params?: any): CometChatMessageTemplate[] {
|
|
120
|
+
const templates = super.getAllMessageTemplates(theme, params);
|
|
121
|
+
// append or replace a template here
|
|
122
|
+
return templates;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// 2. FETCH — WITHOUT THESE TWO THE MESSAGE IS NEVER RETRIEVED.
|
|
126
|
+
// CometChatMessageList builds its request from them:
|
|
127
|
+
// requestBuilder.setTypes(ChatConfigurator.dataSource.getAllMessageTypes())
|
|
128
|
+
// requestBuilder.setCategories(ChatConfigurator.dataSource.getAllMessageCategories())
|
|
129
|
+
// A type absent from those filters is excluded server-side. The bubble appears
|
|
130
|
+
// optimistically when sent, then vanishes on reload — with no error anywhere.
|
|
131
|
+
getAllMessageTypes(): string[] {
|
|
132
|
+
return [...super.getAllMessageTypes(), ORDER_TYPE];
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
getAllMessageCategories(): string[] {
|
|
136
|
+
const categories = super.getAllMessageCategories();
|
|
137
|
+
return categories.includes(CometChat.CATEGORY_CUSTOM)
|
|
138
|
+
? categories
|
|
139
|
+
: [...categories, CometChat.CATEGORY_CUSTOM];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// AFTER login(), not merely after init(). CometChatUIKit.login() calls enableExtensions(),
|
|
144
|
+
// whose first statement is ChatConfigurator.init() — "re-initialize data source". Anything
|
|
145
|
+
// registered earlier is DISCARDED, so a decorator wired at module scope, or straight after
|
|
146
|
+
// init(), silently disappears.
|
|
147
|
+
await CometChatUIKit.login({ uid: UID });
|
|
148
|
+
ChatConfigurator.enable((source) => new OrderDataSource(source));
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**`getId()` is REQUIRED on every `DataSourceDecorator` subclass.** It is the ONE base method that
|
|
152
|
+
does not delegate to the wrapped source — the base throws `Error("Method not implemented.")`, and
|
|
153
|
+
`ChatConfigurator.enable()` calls `getId()` to dedupe the registry. Omit it and registration crashes
|
|
154
|
+
at `ChatConfigurator.enable(...)` with `Method not implemented.` — NOT at render, so it reads as
|
|
155
|
+
unrelated. Every built-in decorator (Polls, Stickers, Translation, LinkPreview, Collaborative*)
|
|
156
|
+
overrides it; yours must too, returning a stable unique string.
|
|
157
|
+
|
|
158
|
+
A custom message type is **two halves, and only one of them is obvious.** Render is
|
|
159
|
+
`getAllMessageTemplates` / `getMessageTemplate`. Fetch is `getAllMessageTypes` /
|
|
160
|
+
`getAllMessageCategories`. Ship the render half alone and everything looks right until the first
|
|
161
|
+
reload, when every message of your type is gone — no error, no warning.
|
|
162
|
+
|
|
163
|
+
`DataSourceDecorator` exposes ~50 overridable methods; the ones you usually want are **`getId`**
|
|
164
|
+
(mandatory — see above), `getAllMessageTemplates`, `getMessageTemplate`, **`getAllMessageTypes`**,
|
|
165
|
+
**`getAllMessageCategories`**, `getMessageOptions` (the long-press menu) and
|
|
166
|
+
`getAuxiliaryOptions` (composer actions). Always call `super.<method>(...)` and modify the result —
|
|
167
|
+
replacing it wholesale drops every built-in message type.
|
|
168
|
+
|
|
169
|
+
> **DOCS GAP (RN-G10):** `DataSourceDecorator` / `MessageDataSource` / `ExtensionsDataSource` and
|
|
170
|
+
> `ChatConfigurator.enable` are **not documented** on any RN page — the docs show only mutating
|
|
171
|
+
> existing templates via `getAllMessageTemplates()`. Built from the kit source; flag this to the
|
|
172
|
+
> developer rather than presenting it as documented.
|
|
173
|
+
>
|
|
174
|
+
> **Partially closed (2026-08-20).** `ui-kit/react-native/message-list` now documents the
|
|
175
|
+
> half that actually breaks builds: a custom type must be registered for **fetch**
|
|
176
|
+
> (`getAllMessageTypes` / `getAllMessageCategories`), not only for render, and the decorator must
|
|
177
|
+
> be registered **after `login()`** because `enableExtensions()` re-runs `ChatConfigurator.init()`.
|
|
178
|
+
> Still missing: a dedicated RN custom-message-types page covering `DataSourceDecorator` /
|
|
179
|
+
> `MessageDataSource` / `ExtensionsDataSource` end to end. Owner: docs.
|
|
180
|
+
|
|
181
|
+
## Customizing an existing bubble without a decorator
|
|
182
|
+
To restyle rather than replace, prefer the theme's bubble style keys —
|
|
183
|
+
`textBubbleStyles`, `imageBubbleStyles`, `fileBubbleStyles`, `pollBubbleStyles` and siblings.
|
|
184
|
+
Fetch exact keys from `/ui-kit/react-native/message-bubble-styling.md`.
|
|
185
|
+
|
|
186
|
+
## Common pitfalls
|
|
187
|
+
1. **Reaching for CSS** — no stylesheets, no `className`, no `--cometchat-*`. Theme object + RN styles.
|
|
188
|
+
2. **Emitting the React plugin API** — does not exist; use `ChatConfigurator` + `DataSourceDecorator`.
|
|
189
|
+
3. **Omitting `getId()` on a decorator** — the base throws; `ChatConfigurator.enable()` calls it → crash at registration with `Method not implemented.`
|
|
190
|
+
4. **Not calling `super`** in a decorator override — silently drops all built-in templates.
|
|
191
|
+
5. **Setting only `light`** when the app follows the OS — dark mode then falls back to defaults.
|
|
192
|
+
6. **Guessing token or style-key names** — fetch them; a wrong key fails silently rather than erroring.
|
|
193
|
+
|
|
194
|
+
## Verify it works
|
|
195
|
+
- Every symbol appears in `catalogs/rn-v5.json`.
|
|
196
|
+
- `npm run verify:fences:rn-v5` compiles the examples against the pinned kit.
|
|
197
|
+
- On device: toggle OS dark mode and confirm the surface follows; confirm a custom template renders
|
|
198
|
+
and built-in types still render alongside it.
|