@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
|
@@ -1,435 +1,90 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cometchat-android-v6-compose-customization
|
|
3
|
-
description: "CometChat Android
|
|
3
|
+
description: "Make the CometChat Android v6 UI match your app in the Jetpack Compose cohort — theming with the CometChatTheme composable and lightColorScheme/darkColorScheme, per-component style data classes, @Composable view slots, state views, menu options, text formatters, custom message rendering with bubble factories, localization and sounds. Triggers: 'cometchat compose theme', 'brand colors jetpack compose cometchat', 'dark mode compose cometchat', 'custom row composable', 'custom message type compose'."
|
|
4
4
|
license: "MIT"
|
|
5
|
-
compatibility: "Android
|
|
5
|
+
compatibility: "Android minSdk >=28; compileSdk >=36; Kotlin >=2.1; AGP >=8.9.1; JVM target 11; com.cometchat:chatuikit-compose-android ^6 (Jetpack Compose cohort) — 6.0.x, verified 6.0.5; com.cometchat:chat-sdk-android ^5"
|
|
6
6
|
metadata:
|
|
7
7
|
author: "CometChat"
|
|
8
|
-
version: "
|
|
9
|
-
tags: "cometchat
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
tags: "cometchat android customization theming v6 compose dark-mode colorscheme"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
> **Ground truth:** `
|
|
12
|
+
> **Ground truth:** catalog `android-v6.json` + the Compose theme source. ⚠️ The theming API below was read from the INSTALLED 6.0.5 source and **differs from the docs** — see the callout. Fetch token names from `color-resources`; never invent one.
|
|
13
|
+
>
|
|
14
|
+
> ⚠️ **Jetpack Compose cohort** — theming is the `CometChatTheme` composable + colour-scheme factories; slots are `@Composable` lambdas. The Views cohort (XML theme attributes + ViewHolder listeners) is a separate skill.
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Customize CometChat Compose components — override message bubble rendering with BubbleFactory, use slot lambda parameters for per-slot overrides, and apply @Immutable style classes. This is the v6 replacement for v5's DataSource/ChatConfigurator pattern.
|
|
16
|
+
## Companion skills (read first)
|
|
17
|
+
- `cometchat-android-v6-core` — install, credentials, init/login, the fetch map. Assumed here, never repeated.
|
|
18
|
+
- `cometchat-android-v6-compose-components` — what exists and its param conventions.
|
|
19
19
|
|
|
20
20
|
## Use this skill when
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
import com.cometchat.chat.constants.CometChatConstants
|
|
42
|
-
import com.cometchat.chat.models.BaseMessage
|
|
43
|
-
import com.cometchat.uikit.core.constants.UIKitConstants.MessageBubbleAlignment
|
|
44
|
-
|
|
45
|
-
class LocationBubbleFactory : BubbleFactory {
|
|
46
|
-
|
|
47
|
-
override fun getCategory(): String = CometChatConstants.CATEGORY_CUSTOM
|
|
48
|
-
override fun getType(): String = "location"
|
|
49
|
-
|
|
50
|
-
override fun getContentView(
|
|
51
|
-
message: BaseMessage,
|
|
52
|
-
alignment: MessageBubbleAlignment,
|
|
53
|
-
style: CometChatMessageBubbleStyle,
|
|
54
|
-
textFormatters: List<CometChatTextFormatter>
|
|
55
|
-
): @Composable () -> Unit = {
|
|
56
|
-
// Your custom content composable
|
|
57
|
-
val metadata = message.metadata
|
|
58
|
-
val lat = metadata?.optDouble("latitude") ?: 0.0
|
|
59
|
-
val lng = metadata?.optDouble("longitude") ?: 0.0
|
|
60
|
-
LocationMapView(latitude = lat, longitude = lng)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### 1.2 Registering BubbleFactories
|
|
66
|
-
|
|
67
|
-
```kotlin
|
|
68
|
-
CometChatMessageList(
|
|
69
|
-
user = user,
|
|
70
|
-
bubbleFactories = listOf(
|
|
71
|
-
LocationBubbleFactory(),
|
|
72
|
-
PaymentBubbleFactory()
|
|
73
|
-
)
|
|
74
|
-
)
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The list is converted to a map keyed by `"category_type"` internally via `toFactoryMap()`.
|
|
78
|
-
|
|
79
|
-
### 1.3 Complete Bubble Replacement
|
|
80
|
-
|
|
81
|
-
Override `getBubbleView()` to replace the ENTIRE bubble (all slots):
|
|
82
|
-
|
|
83
|
-
```kotlin
|
|
84
|
-
class CustomBubbleFactory : BubbleFactory {
|
|
85
|
-
override fun getCategory(): String = "custom"
|
|
86
|
-
override fun getType(): String = "payment"
|
|
87
|
-
|
|
88
|
-
override fun getBubbleView(
|
|
89
|
-
message: BaseMessage,
|
|
90
|
-
alignment: MessageBubbleAlignment
|
|
91
|
-
): (@Composable () -> Unit)? = {
|
|
92
|
-
// Complete custom bubble — no header, footer, avatar, etc.
|
|
93
|
-
PaymentCard(message = message, alignment = alignment)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
When `getBubbleView()` returns non-null, all other slot methods are ignored.
|
|
99
|
-
|
|
100
|
-
### 1.4 Slot Methods
|
|
101
|
-
|
|
102
|
-
All return `(@Composable () -> Unit)?` — return `null` to use defaults:
|
|
103
|
-
|
|
104
|
-
| Method | Slot | Parameters |
|
|
105
|
-
|---|---|---|
|
|
106
|
-
| `getContentView()` | Main content | `message, alignment, style, textFormatters` |
|
|
107
|
-
| `getLeadingView()` | Avatar | `message, alignment, style` |
|
|
108
|
-
| `getHeaderView()` | Sender name | `message, alignment, style, showTime` |
|
|
109
|
-
| `getReplyView()` | Reply preview | `message, alignment, style` |
|
|
110
|
-
| `getBottomView()` | Moderation | `message, alignment, style, hideModerationView` |
|
|
111
|
-
| `getStatusInfoView()` | Timestamp/receipts | `message, alignment, style, showTime` |
|
|
112
|
-
| `getThreadView()` | Thread indicator | `message, alignment, style, onThreadRepliesClick` |
|
|
113
|
-
| `getFooterView()` | Reactions | `message, alignment, style, onReactionClick, onReactionLongClick, onAddMoreReactionsClick` |
|
|
114
|
-
|
|
115
|
-
### 1.5 Style Override
|
|
116
|
-
|
|
117
|
-
```kotlin
|
|
118
|
-
override fun getBubbleStyle(
|
|
119
|
-
message: BaseMessage,
|
|
120
|
-
alignment: MessageBubbleAlignment
|
|
121
|
-
): CometChatMessageBubbleStyle? {
|
|
122
|
-
return CometChatMessageBubbleStyle(
|
|
123
|
-
backgroundColor = Color(0xFFE8F5E9),
|
|
124
|
-
cornerRadius = 16.dp
|
|
125
|
-
)
|
|
126
|
-
}
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Factory style is the highest priority in the 3-tier style chain.
|
|
130
|
-
|
|
131
|
-
### 1.6 Lifecycle
|
|
132
|
-
|
|
133
|
-
```kotlin
|
|
134
|
-
override fun onDispose(message: BaseMessage) {
|
|
135
|
-
// Clean up resources when bubble leaves composition
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### 1.7 Custom attachment options (Scenario 3) — pass the `attachmentOptions` parameter
|
|
140
|
-
|
|
141
|
-
A `BubbleFactory` only *renders* a custom type; to let users *create* one you usually add a composer attachment action. On Compose the canonical path is the **`attachmentOptions` parameter** on `CometChatMessageComposer` — a `List<CometChatMessageComposerAction>` whose contents are added **after** the built-in options.
|
|
142
|
-
|
|
143
|
-
```kotlin
|
|
144
|
-
CometChatMessageComposer(
|
|
145
|
-
user = user,
|
|
146
|
-
attachmentOptions = listOf(
|
|
147
|
-
CometChatMessageComposerAction(
|
|
148
|
-
id = "location",
|
|
149
|
-
title = "Send Location",
|
|
150
|
-
icon = R.drawable.ic_location,
|
|
151
|
-
onClick = OnClick { /* pick + send (see 1.8) */ }
|
|
152
|
-
)
|
|
153
|
-
)
|
|
154
|
-
)
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
**Append is automatic — your list does NOT replace the defaults.** Internally the composable calls `composerViewModel.setAttachmentOptions(attachmentOptions)` (`CometChatMessageComposer.kt:431-432`), which sets only the *custom* options list (`_customAttachmentOptions`). The defaults (camera/image/video/audio/document/poll/collab-doc/collab-whiteboard) are rebuilt every time by `getDefaultAttachmentOptions(...)` and your custom options are concatenated at the end (`CometChatMessageComposerViewModel.kt:646-649`). There is no "wipe defaults" footgun here — `setAttachmentOptions` despite its name does NOT drop the built-ins.
|
|
158
|
-
|
|
159
|
-
> Hide a built-in instead with the composer's `hide*Option` flags (e.g. `hidePollOption = true`), which flip the `_show*Option` visibility checked inside `getDefaultAttachmentOptions`.
|
|
160
|
-
|
|
161
|
-
If you hold a `CometChatMessageComposerViewModel` directly (advanced), `addAttachmentOption(action)` appends one custom option and `setAttachmentOptions(list)` replaces the custom list — both verified at `CometChatMessageComposerViewModel.kt:657 / :666`. The built-in option IDs are constants on `CometChatMessageComposerAction` (`ID_CAMERA`, `ID_IMAGE`, `ID_VIDEO`, `ID_AUDIO`, `ID_DOCUMENT`, `ID_POLL`, `ID_COLLABORATIVE_DOCUMENT`, `ID_COLLABORATIVE_WHITEBOARD` — `CometChatMessageComposerAction.kt:42-49`).
|
|
162
|
-
|
|
163
|
-
### 1.8 Sending a custom message — use the UIKit path, not the raw SDK
|
|
164
|
-
|
|
165
|
-
```kotlin
|
|
166
|
-
val message = CustomMessage(
|
|
167
|
-
receiverId,
|
|
168
|
-
CometChatConstants.RECEIVER_TYPE_USER, // or RECEIVER_TYPE_GROUP
|
|
169
|
-
"location", // matches the BubbleFactory type
|
|
170
|
-
customData // org.json.JSONObject
|
|
171
|
-
)
|
|
172
|
-
// ✅ kit path — sets muid + sender, fires ccMessageSent → list APPENDS
|
|
173
|
-
CometChatUIKit.sendCustomMessage(message, object : CometChat.CallbackListener<CustomMessage>() {
|
|
174
|
-
override fun onSuccess(p0: CustomMessage) {}
|
|
175
|
-
override fun onError(p0: CometChatException) {}
|
|
176
|
-
})
|
|
177
|
-
// ❌ CometChat.sendCustomMessage(...) — no muid/sender/event → recipient error + realtime replace
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Verified (v6 core/compose): `CometChatMessageComposer(attachmentOptions = …)` param (`CometChatMessageComposer.kt:338`), `CometChatMessageComposerViewModel.addAttachmentOption / setAttachmentOptions / getDefaultAttachmentOptions` (`:657 / :666 / :547`), `CometChatUIKit.sendCustomMessage(CustomMessage, CallbackListener)` (`CometChatUIKit.kt:472`).
|
|
181
|
-
|
|
182
|
-
### 1.9 Override an EXISTING type's bubble (Scenario 2)
|
|
183
|
-
|
|
184
|
-
To replace the rendering of a built-in type (e.g. text or image), register a `BubbleFactory` whose `getCategory()`/`getType()` **match the built-in identifiers**. Built-in types are NOT pre-seeded as factory entries — the bubble falls back to `InternalContentRenderer` only when no factory matches a `"category_type"` key (`CometChatMessageBubble.kt:155` "Falls back to InternalContentRenderer if no factory is provided"). So a matching factory simply takes priority over the internal default.
|
|
185
|
-
|
|
186
|
-
```kotlin
|
|
187
|
-
import com.cometchat.chat.constants.CometChatConstants
|
|
188
|
-
|
|
189
|
-
class MyTextBubbleFactory : BubbleFactory {
|
|
190
|
-
override fun getCategory(): String = CometChatConstants.CATEGORY_MESSAGE // "message"
|
|
191
|
-
override fun getType(): String = CometChatConstants.MESSAGE_TYPE_TEXT // "text"
|
|
192
|
-
|
|
193
|
-
override fun getContentView(
|
|
194
|
-
message: BaseMessage,
|
|
195
|
-
alignment: UIKitConstants.MessageBubbleAlignment,
|
|
196
|
-
style: CometChatMessageBubbleStyle,
|
|
197
|
-
textFormatters: List<CometChatTextFormatter>
|
|
198
|
-
): @Composable () -> Unit = {
|
|
199
|
-
MyCustomTextContent(message as TextMessage) // only the content area
|
|
200
|
-
}
|
|
201
|
-
// …or override getBubbleView() to replace the whole bubble (see 1.3)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
CometChatMessageList(user = user, bubbleFactories = listOf(MyTextBubbleFactory()))
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
This is still additive at the list level: registering a `message_text` factory only overrides text bubbles; image/video/custom types keep their internal rendering. Use `getContentView()` for content-only override, `getBubbleView()` for full-bubble replacement.
|
|
208
|
-
|
|
209
|
-
### 1.10 Add a long-press message option (Scenario 4 — Forward-style)
|
|
210
|
-
|
|
211
|
-
`CometChatMessageList` exposes two lambda parameters for the long-press option sheet (`CometChatMessageList.kt:577-598`):
|
|
212
|
-
|
|
213
|
-
| Param | Type | Semantics |
|
|
214
|
-
|---|---|---|
|
|
215
|
-
| `addOptions` | `((BaseMessage) -> List<CometChatMessageOption>)?` | **Append** after the defaults |
|
|
216
|
-
| `options` | `((BaseMessage) -> List<CometChatMessageOption>?)?` | **Replace** all defaults (takes precedence over `addOptions`; return `null` to keep defaults) |
|
|
217
|
-
| `onMessageOptionClick` | `((BaseMessage, optionId: String, optionName: String) -> Unit)?` | Click handler |
|
|
218
|
-
|
|
219
|
-
Use `addOptions` for a Forward-style action so the built-in Reply/Copy/Edit/Delete survive:
|
|
220
|
-
|
|
221
|
-
```kotlin
|
|
222
|
-
import com.cometchat.uikit.core.domain.model.CometChatMessageOption
|
|
223
|
-
|
|
224
|
-
CometChatMessageList(
|
|
225
|
-
user = user,
|
|
226
|
-
addOptions = { message -> // ✅ appended to defaults
|
|
227
|
-
listOf(
|
|
228
|
-
CometChatMessageOption(
|
|
229
|
-
id = "forward",
|
|
230
|
-
title = "Forward",
|
|
231
|
-
icon = R.drawable.ic_forward,
|
|
232
|
-
onClick = { /* open forward picker for `message` */ }
|
|
233
|
-
)
|
|
234
|
-
)
|
|
235
|
-
}
|
|
236
|
-
// ❌ options = { listOf(forward) } // would DROP reply/copy/edit/delete
|
|
237
|
-
)
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
`CometChatMessageOption(id, title, titleColor, icon, iconTintColor, …, onClick)` is a data class at `CometChatMessageOption.kt:21`. Resolution order is verified in `CometChatMessageListViewModel.resolveMessageOptions` (`:817-827`): `setOptions` result wins if non-null, else `defaultOptions + addOptions`.
|
|
241
|
-
|
|
242
|
-
### 1.11 MessageTemplate via the DataSource (docs-taught alternative to BubbleFactory)
|
|
243
|
-
|
|
244
|
-
> ⚠️ **Verify before using — symbols not found in the GA v6 Compose source.** `CometChatUIKit.getDataSource()`, `getMessageTemplates()`, `CometChatMessageTemplate`, and a `templates` parameter on the Compose `CometChatMessageList` appear in the Android **docs** but are **absent from the verified `com.cometchat.uikit.compose` GA source** (they're the legacy `com.cometchat.chatuikit` v5-shaped API; the Compose list only exposes `bubbleFactories`). Treat this section as a docs reference that may not compile against your installed v6 kit — **prefer `BubbleFactory` (the confirmed v6-native path) for all new code.**
|
|
245
|
-
|
|
246
|
-
The `BubbleFactory` / slot-lambda surface above is the primary v6 customization path. The Android docs also teach a **`MessageTemplate`** path through the data source ([message-template](https://www.cometchat.com/docs/ui-kit/android/v6/message-template)) — fetch the existing templates, mutate the one you want, then re-apply (append, never replace with a single-item list):
|
|
247
|
-
|
|
248
|
-
```kotlin
|
|
249
|
-
// 1. fetch existing templates from the data source
|
|
250
|
-
val templates = CometChatUIKit.getDataSource()
|
|
251
|
-
.getMessageTemplates(additionParameter) // pass the list's additionParameter
|
|
252
|
-
.toMutableList()
|
|
253
|
-
|
|
254
|
-
// 2. mutate the template you want (or create a new one for a custom type)
|
|
255
|
-
templates.find { it.type == UIKitConstants.MessageType.TEXT }
|
|
256
|
-
?.setContentView { baseMessage, alignment ->
|
|
257
|
-
Text(text = (baseMessage as? TextMessage)?.text ?: "")
|
|
21
|
+
"match the chat to our brand", "use our typography", "support dark mode", "restyle rows or bubbles", "replace the empty/loading/error view", "add a long-press option", "render a custom message type", "translate the UI". **Theming lives HERE** — there is no separate theming skill.
|
|
22
|
+
|
|
23
|
+
## Theming — the top mechanism (BAKED)
|
|
24
|
+
Wrap the kit UI in the `CometChatTheme` composable and override the colour scheme:
|
|
25
|
+
```kotlin
|
|
26
|
+
import androidx.compose.foundation.isSystemInDarkTheme
|
|
27
|
+
import androidx.compose.runtime.Composable
|
|
28
|
+
import androidx.compose.ui.graphics.Color
|
|
29
|
+
import com.cometchat.uikit.compose.theme.CometChatTheme
|
|
30
|
+
import com.cometchat.uikit.compose.theme.darkColorScheme
|
|
31
|
+
import com.cometchat.uikit.compose.theme.lightColorScheme
|
|
32
|
+
|
|
33
|
+
@Composable
|
|
34
|
+
fun AppChatTheme(content: @Composable () -> Unit) {
|
|
35
|
+
// Pass named params — CometChatColorScheme is NOT a data class, so there is no .copy().
|
|
36
|
+
// Setting `primary` DERIVES the whole extended ramp (extendedPrimaryColor50…900) for you.
|
|
37
|
+
val scheme = if (isSystemInDarkTheme()) {
|
|
38
|
+
darkColorScheme(primary = Color(0xFF8B7FFF))
|
|
39
|
+
} else {
|
|
40
|
+
lightColorScheme(primary = Color(0xFFF76808))
|
|
258
41
|
}
|
|
259
|
-
|
|
260
|
-
val contact = CometChatMessageTemplate().apply {
|
|
261
|
-
setType("contact"); setCategory(UIKitConstants.MessageCategory.CUSTOM)
|
|
262
|
-
setContentView { baseMessage, _ -> /* custom composable */ }
|
|
42
|
+
CometChatTheme(colorScheme = scheme) { content() }
|
|
263
43
|
}
|
|
264
|
-
templates.add(contact)
|
|
265
|
-
|
|
266
|
-
// 3. re-apply — Compose passes the list to CometChatMessageList
|
|
267
|
-
CometChatMessageList(user = user, templates = templates)
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
Compose templates expose lambda slot setters (`setContentView`, `setHeaderView`, `setFooterView`, `setBottomView`, `setStatusInfoView`, `setBubbleView`, `setOptions`) mirroring §2's slots. Prefer `BubbleFactory` for new code; use `getMessageTemplates(...)` when you want to start from the kit's defaults and tweak one type. (This overlaps the custom-message topic.)
|
|
271
|
-
|
|
272
|
-
## 2. Slot Lambda Parameters (Per-Slot Overrides)
|
|
273
|
-
|
|
274
|
-
Override individual slots across ALL message types directly on `CometChatMessageList`:
|
|
275
|
-
|
|
276
|
-
```kotlin
|
|
277
|
-
CometChatMessageList(
|
|
278
|
-
user = user,
|
|
279
|
-
|
|
280
|
-
// Custom avatar for all messages
|
|
281
|
-
leadingView = { message, alignment ->
|
|
282
|
-
if (alignment == MessageAlignment.LEFT) {
|
|
283
|
-
AsyncImage(
|
|
284
|
-
model = message.sender?.avatar,
|
|
285
|
-
contentDescription = null,
|
|
286
|
-
modifier = Modifier.size(32.dp).clip(CircleShape)
|
|
287
|
-
)
|
|
288
|
-
}
|
|
289
|
-
},
|
|
290
|
-
|
|
291
|
-
// Custom timestamp for all messages
|
|
292
|
-
statusInfoView = { message, alignment ->
|
|
293
|
-
Text(
|
|
294
|
-
text = formatTime(message.sentAt),
|
|
295
|
-
style = CometChatTheme.typography.caption1Regular,
|
|
296
|
-
color = CometChatTheme.colorScheme.textColorTertiary
|
|
297
|
-
)
|
|
298
|
-
},
|
|
299
|
-
|
|
300
|
-
// Custom footer for all messages
|
|
301
|
-
footerView = { message, alignment ->
|
|
302
|
-
// Custom reactions display
|
|
303
|
-
ReactionsRow(message = message)
|
|
304
|
-
}
|
|
305
|
-
)
|
|
306
44
|
```
|
|
45
|
+
`CometChatTheme(colorScheme, shapes, typography, content)` provides all three through composition locals; read them anywhere with `CometChatTheme.colorScheme` / `.typography` / `.shapes`. **Follow the system by default** on a fresh integration (`isSystemInDarkTheme()`), and override only the tokens you actually brand so future kit versions stay consistent.
|
|
307
46
|
|
|
308
|
-
|
|
47
|
+
> ⚠️ **Docs drift — trust this file.** The docs Compose tab teaches `CometChatColorScheme.light()` / `.dark()`. Those factories **do not exist** in 6.0.5: the real ones are **top-level `lightColorScheme()` / `darkColorScheme()`** in `com.cometchat.uikit.compose.theme`, configured by **named params, not `.copy()`** (`CometChatColorScheme` is a plain class). Logged internally. The compile gate rejects both wrong forms.
|
|
309
48
|
|
|
310
|
-
|
|
49
|
+
## Customization mechanism map (pick the smallest one that does the job)
|
|
50
|
+
| Intent | Mechanism | Docs page (fetch for exact names) |
|
|
311
51
|
|---|---|---|
|
|
312
|
-
|
|
|
313
|
-
|
|
|
314
|
-
|
|
|
315
|
-
|
|
|
316
|
-
|
|
|
317
|
-
|
|
|
318
|
-
|
|
|
319
|
-
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
## 3. Style Classes
|
|
329
|
-
|
|
330
|
-
### 3.1 Using Style Classes
|
|
331
|
-
|
|
52
|
+
| brand colour, light/dark | `CometChatTheme(colorScheme = …)` + `lightColorScheme()`/`darkColorScheme()` | `theme-introduction` (Compose tab) |
|
|
53
|
+
| exact token names | `CometChatColorScheme` fields | `color-resources` |
|
|
54
|
+
| fonts / text styles | `CometChatTypography` (28 `TextStyle` named params: `titleBold`, `heading1Bold`, …), passed as `CometChatTheme(typography = …)` | **no shipped page documents Compose typography** — `theme-introduction` is colours-only and `component-styling` covers Views (`cometchatFontBold`). Use the signature here; do not fetch. |
|
|
55
|
+
| restyle ONE component | `style = CometChat<X>Style.default().copy(...)` (style classes ARE data classes) | `component-styling` |
|
|
56
|
+
| bubble look per type | bubble style data classes | `message-bubble-styling` |
|
|
57
|
+
| replace a REGION of a row | `@Composable` slot params — `itemView`, `leadingView`, `subtitleView`, `trailingView` | `customization-view-slots` |
|
|
58
|
+
| empty / error / loading | `hideEmptyState`/`hideErrorState`/`hideLoadingState` + your own composable | `customization-state-views` |
|
|
59
|
+
| long-press / composer actions | `options` / `addOptions` params | `customization-menu-options` |
|
|
60
|
+
| **custom message TYPE** | bubble factories (see below) | *not* the docs `message-template` page |
|
|
61
|
+
| custom text patterns | `textFormatters` + `CometChatTextFormatter`/`CometChatMentionsFormatter` | `customization-text-formatters` |
|
|
62
|
+
| what a list fetches | `conversationsRequestBuilder` (and the per-list equivalents) | `customization-viewmodel-data` |
|
|
63
|
+
| translate the UI | `CometChatLocalize` | `localize` |
|
|
64
|
+
| in-app sounds | `CometChatSoundManager` | `sound-manager` |
|
|
65
|
+
|
|
66
|
+
## What's swappable — slots are `@Composable` lambdas
|
|
332
67
|
```kotlin
|
|
333
68
|
CometChatConversations(
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
)
|
|
342
|
-
)
|
|
343
|
-
)
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### 3.2 Style Class Pattern
|
|
347
|
-
|
|
348
|
-
All style classes follow this pattern:
|
|
349
|
-
|
|
350
|
-
```kotlin
|
|
351
|
-
@Immutable
|
|
352
|
-
data class CometChatConversationsStyle(
|
|
353
|
-
val backgroundColor: Color,
|
|
354
|
-
val titleTextColor: Color,
|
|
355
|
-
val titleTextStyle: TextStyle,
|
|
356
|
-
// ... many properties
|
|
357
|
-
) {
|
|
358
|
-
companion object {
|
|
359
|
-
@Composable
|
|
360
|
-
fun default(
|
|
361
|
-
backgroundColor: Color = CometChatTheme.colorScheme.backgroundColor1,
|
|
362
|
-
titleTextColor: Color = CometChatTheme.colorScheme.textColorPrimary,
|
|
363
|
-
// ... defaults from CometChatTheme
|
|
364
|
-
): CometChatConversationsStyle = CometChatConversationsStyle(/* ... */)
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
Use `Companion.default()` with named parameter overrides — never call the data class constructor directly.
|
|
370
|
-
|
|
371
|
-
### 3.3 Nested Styles
|
|
372
|
-
|
|
373
|
-
Some styles contain nested style classes:
|
|
374
|
-
|
|
375
|
-
```kotlin
|
|
376
|
-
CometChatConversationsStyle.default(
|
|
377
|
-
itemStyle = CometChatConversationListItemStyle.default(/* ... */),
|
|
378
|
-
popupMenuStyle = CometChatPopupMenuStyle.default(/* ... */),
|
|
379
|
-
emptyStateStyle = CometChatEmptyStateStyle.default(/* ... */),
|
|
380
|
-
errorStateStyle = CometChatErrorStateStyle.default(/* ... */),
|
|
381
|
-
loadingStateStyle = CometChatLoadingStateStyle.default(/* ... */),
|
|
382
|
-
dialogStyle = CometChatDialogStyle.default(/* ... */)
|
|
69
|
+
modifier = Modifier.fillMaxSize(),
|
|
70
|
+
trailingView = { conversation, typing -> MyUnreadPill(conversation) }, // (Conversation, TypingIndicator?)
|
|
71
|
+
options = { context, conversation -> myMenuItems(conversation) },
|
|
72
|
+
hideEmptyState = true, // then render your own
|
|
73
|
+
conversationsRequestBuilder = ConversationsRequest.ConversationsRequestBuilder()
|
|
74
|
+
.setConversationType("user"), // scope in the REQUEST, not a client filter
|
|
75
|
+
onItemClick = { /* navigate */ },
|
|
383
76
|
)
|
|
384
77
|
```
|
|
78
|
+
Slot params take `(@Composable (Conversation, TypingIndicator?) -> Unit)?` on the conversations list, with the analogous shape on users/groups/members. Style params take a data class: `style = CometChatConversationsStyle.default().copy(...)`.
|
|
385
79
|
|
|
386
|
-
##
|
|
387
|
-
|
|
388
|
-
```kotlin
|
|
389
|
-
CometChatMessageList(
|
|
390
|
-
user = user,
|
|
391
|
-
loadingView = { CircularProgressIndicator() },
|
|
392
|
-
emptyView = { Text("No messages yet") },
|
|
393
|
-
errorView = { Text("Something went wrong") }
|
|
394
|
-
)
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
## 5. v5 → v6 Migration
|
|
398
|
-
|
|
399
|
-
| v5 Pattern | v6 Pattern |
|
|
400
|
-
|---|---|
|
|
401
|
-
| `ChatConfigurator.enable(decorator)` | `CometChatMessageList(bubbleFactories = listOf(...))` |
|
|
402
|
-
| DataSource template methods | BubbleFactory slot methods |
|
|
403
|
-
| Global decorator chain | Per-component factory registration |
|
|
404
|
-
| No bubble replacement | `getBubbleView()` for complete replacement |
|
|
405
|
-
| Theme-level styling only | Per-factory `getBubbleStyle()` |
|
|
406
|
-
|
|
407
|
-
## Text formatters (inline mentions / URLs / custom tokens)
|
|
408
|
-
|
|
409
|
-
Style/transform message text inline by passing `textFormatters` to the composer/list. The kit ships `CometChatMentionsFormatter` + `CometChatRichTextFormatter` (subclasses of the abstract `CometChatTextFormatter`) in `com.cometchat.uikit.compose.presentation.shared.formatters`. Default behavior (a mentions formatter) applies when you pass nothing — so to ADD a custom one, include the defaults too.
|
|
410
|
-
|
|
411
|
-
```kotlin
|
|
412
|
-
import com.cometchat.uikit.compose.presentation.shared.formatters.CometChatMentionsFormatter
|
|
413
|
-
import com.cometchat.uikit.compose.presentation.shared.formatters.CometChatTextFormatter
|
|
414
|
-
|
|
415
|
-
CometChatMessageComposer(
|
|
416
|
-
user = user,
|
|
417
|
-
textFormatters = listOf(CometChatMentionsFormatter(context) /* , YourFormatter(context) */),
|
|
418
|
-
)
|
|
419
|
-
// CometChatMessageList also takes textFormatters: List<CometChatTextFormatter>.
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
For a custom @/#/! token: subclass `CometChatTextFormatter(trackingCharacter)` and implement its `search()` + view hooks (see the kit's `formatters/` source + the per-platform docs).
|
|
423
|
-
|
|
424
|
-
## Hard rules
|
|
80
|
+
## Custom message types — bubble factories, not templates
|
|
81
|
+
Register factories on the message list for custom categories/types; `createContentView` runs before the message is known, `bindContentView` receives it. ⚠️ **`CometChatMessageTemplate` and `setTemplates` are absent from the shipped 6.0.5 artifact** (logged internally). The docs `message-template` page was corrected upstream (verified 2026-09-09): it is now "Message Bubble Factory" and teaches the factory API — fetch its Compose tab for the current signatures.
|
|
425
82
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
- When `getBubbleView()` returns non-null, ALL other slot methods are ignored for that message type
|
|
429
|
-
- Slot lambda parameters on `CometChatMessageList` override BubbleFactory slot methods — use lambdas for cross-type overrides, factories for per-type overrides
|
|
430
|
-
- Style classes must use `Companion.default()` factory — the data class constructor requires ALL parameters
|
|
431
|
-
- Do NOT confuse BubbleFactory (UI rendering) with DataSource (data fetching) — they are separate layers
|
|
83
|
+
## The rule
|
|
84
|
+
**Custom UI goes INSIDE the component** — a slot param, a style copy, a menu option, a formatter — never a composable stacked over a kit component with a `Box`, and never a forked component. If no slot exists, fetch the page's Compose tab before inventing UI; if there genuinely is no hook, say so rather than re-implementing the component.
|
|
432
85
|
|
|
433
|
-
##
|
|
86
|
+
## Common pitfalls
|
|
87
|
+
`CometChatColorScheme.light()` from the docs (use `lightColorScheme()`) · calling `.copy()` on a colour scheme (not a data class — pass named params) · forgetting `CometChatTheme { }` around kit UI (falls back to defaults) · theming only light mode (no `isSystemInDarkTheme()` branch) · hardcoding colours per screen · `Box`-stacking custom UI instead of using a slot param · re-implementing a list to change one row · client-side filtering instead of a scoped request builder · emitting `CometChatMessageTemplate`.
|
|
434
88
|
|
|
435
|
-
|
|
89
|
+
## Verify it works
|
|
90
|
+
Compile: `./gradlew :app:assembleDebug # in YOUR app (native-fence.mjs is a pack-repo gate, not installed by the CLI)`. On device: the brand colour appears on kit surfaces; toggle system dark mode → the UI follows with readable contrast; a slot composable renders INSIDE its component; state views appear on empty/error/loading; a changed menu option shows on long-press.
|