@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.
Files changed (490) hide show
  1. package/.claude-plugin/marketplace.json +55 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CHANGELOG.md +36 -0
  4. package/LICENSE +21 -0
  5. package/README.md +41 -163
  6. package/RULES.md +114 -0
  7. package/bin/cometchat-skills.mjs +1180 -0
  8. package/bin/legacy-skills.json +95 -0
  9. package/catalogs/android-v6.json +1646 -0
  10. package/catalogs/flutter-v6.json +651 -0
  11. package/catalogs/ios-v5.json +1383 -0
  12. package/catalogs/rn-calls-v5.json +134 -0
  13. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  14. package/catalogs/rn-sdk-v4.json +672 -0
  15. package/catalogs/rn-v5.json +449 -0
  16. package/catalogs/rn-v5.symbols.txt +216 -0
  17. package/catalogs/sdk-android-v5.json +514 -0
  18. package/contracts.android-calls-v5.json +122 -0
  19. package/contracts.android-v6.json +135 -0
  20. package/contracts.angular-v5.json +694 -0
  21. package/contracts.flutter-calls-v5.json +77 -0
  22. package/contracts.flutter-v6.json +126 -0
  23. package/contracts.ios-calls-v5.json +67 -0
  24. package/contracts.ios-v5.json +436 -0
  25. package/contracts.json +82 -0
  26. package/contracts.rn-calls-v5.json +77 -0
  27. package/contracts.rn-v5.json +727 -0
  28. package/contracts.sdk-android-v5.json +15 -0
  29. package/contracts.web-calls-v5.json +45 -0
  30. package/features.android-calls-v5.json +246 -0
  31. package/features.android-v6.json +65 -0
  32. package/features.angular-v5.json +521 -0
  33. package/features.flutter-calls-v5.json +286 -0
  34. package/features.flutter-v6.json +484 -0
  35. package/features.ios-calls-v5.json +236 -0
  36. package/features.ios-v5.json +573 -0
  37. package/features.json +61 -0
  38. package/features.rn-calls-v5.json +187 -0
  39. package/features.rn-v5.json +614 -0
  40. package/features.sdk-android-v5.json +40 -0
  41. package/features.sdk-jsv4.json +24 -0
  42. package/features.web-calls-v5.json +108 -0
  43. package/package.json +151 -74
  44. package/peers.yaml +312 -0
  45. package/registry/README.md +31 -0
  46. package/registry/android-calls-v5.json +54 -0
  47. package/registry/android-v6.json +137 -0
  48. package/registry/angular-v5.json +114 -0
  49. package/registry/flutter-calls-v5.json +54 -0
  50. package/registry/flutter-v6.json +119 -0
  51. package/registry/ios-calls-v5.json +59 -0
  52. package/registry/ios-v5.json +97 -0
  53. package/registry/rn-calls-v5.json +59 -0
  54. package/registry/rn-v5.json +129 -0
  55. package/registry/sdk-android-v5.json +53 -0
  56. package/registry/sdk-jsv4.json +53 -0
  57. package/registry/web-calls-v5.json +54 -0
  58. package/registry/web-v7.json +99 -0
  59. package/skills/cometchat/SKILL.md +42 -2096
  60. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  61. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  62. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  63. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  66. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  67. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  68. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  69. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  70. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  71. package/skills/cometchat-android-v6-calls/SKILL.md +128 -413
  72. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  73. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  74. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  75. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  76. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  77. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  78. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  79. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  80. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  81. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  82. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  83. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  84. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  85. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  86. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  87. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  88. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  89. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  90. package/skills/cometchat-android-v6-production/SKILL.md +40 -179
  91. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  92. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  93. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  94. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  95. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  96. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  97. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  98. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  99. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  100. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  101. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  102. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  103. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  104. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  105. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  106. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  107. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  108. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  109. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  110. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  111. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  112. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  113. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  114. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  115. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  116. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  117. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  118. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  119. package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
  120. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  121. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  122. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  123. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  124. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  125. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  126. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  127. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  128. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -389
  129. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  130. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  131. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  132. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  133. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  134. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  135. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  136. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  137. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  138. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  139. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  140. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  141. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
  142. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  143. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  144. package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
  145. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  146. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  147. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  148. package/skills/cometchat-ios-calls/SKILL.md +112 -563
  149. package/skills/cometchat-ios-components/SKILL.md +44 -834
  150. package/skills/cometchat-ios-core/SKILL.md +181 -1068
  151. package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
  152. package/skills/cometchat-ios-core/references/docs-map.md +123 -0
  153. package/skills/cometchat-ios-core/references/install.md +23 -0
  154. package/skills/cometchat-ios-core/references/layout.md +186 -0
  155. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  156. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  157. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  158. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  159. package/skills/cometchat-ios-features/SKILL.md +29 -738
  160. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  161. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  162. package/skills/cometchat-ios-push/SKILL.md +24 -602
  163. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  164. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  165. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  166. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  167. package/skills/cometchat-onboarding/SKILL.md +89 -0
  168. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  169. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  170. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  171. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  172. package/skills/cometchat-onboarding/references/platforms.md +90 -0
  173. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  174. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  175. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  176. package/skills/cometchat-react-native-core/SKILL.md +313 -0
  177. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  178. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  179. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  180. package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
  181. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  182. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  183. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  184. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  185. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  186. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  187. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  188. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  189. package/skills/cometchat-react-native-production/SKILL.md +78 -0
  190. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  191. package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
  192. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  193. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  194. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  195. package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
  196. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  197. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  198. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  199. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  200. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  201. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  202. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  203. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  204. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  205. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  206. package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
  207. package/skills/cometchat-react-v7-core/references/layout.md +158 -0
  208. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  209. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  210. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  211. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  212. package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
  213. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  214. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  215. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  216. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  217. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  218. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  219. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  220. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  221. package/test-suite/README.md +70 -0
  222. package/test-suite/catalogs/android-calls-v5.json +830 -0
  223. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  224. package/test-suite/catalogs/android-v6.json +1646 -0
  225. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  226. package/test-suite/catalogs/angular-v5.json +7587 -0
  227. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  228. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  229. package/test-suite/catalogs/flutter-v6.json +651 -0
  230. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  231. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  232. package/test-suite/catalogs/ios-v5.json +1383 -0
  233. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  234. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  235. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  236. package/test-suite/catalogs/rn-v5.json +449 -0
  237. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  238. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  239. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  240. package/test-suite/catalogs/web-calls-v5.json +195 -0
  241. package/test-suite/catalogs/web-v7.json +1243 -0
  242. package/test-suite/scripts/build-registry.mjs +113 -0
  243. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  244. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  245. package/test-suite/scripts/lint-skills.mjs +909 -0
  246. package/test-suite/scripts/measure-tokens.mjs +169 -0
  247. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  248. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  249. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  250. package/test-suite/scripts/verify-catalog.mjs +242 -0
  251. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  252. package/test-suite/scripts/verify-detection.mjs +178 -0
  253. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  254. package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
  255. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  256. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  257. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  258. package/test-suite/typecheck/angular-v5/package.json +21 -0
  259. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  260. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  261. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  262. package/test-suite/typecheck/web-v7/package.json +18 -0
  263. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  264. package/bin/install.js +0 -1003
  265. package/skills/.claude-plugin/marketplace.json +0 -86
  266. package/skills/cometchat/references/asking-questions.md +0 -48
  267. package/skills/cometchat-a11y/SKILL.md +0 -477
  268. package/skills/cometchat-android-v5/SKILL.md +0 -121
  269. package/skills/cometchat-android-v5-calls/SKILL.md +0 -429
  270. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  271. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  272. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  273. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  274. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  275. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  276. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  277. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  278. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  279. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  280. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  281. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  282. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  283. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  284. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  285. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  286. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  287. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  288. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  289. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  290. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  291. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  292. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  293. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  294. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  295. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  296. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  297. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  298. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  299. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  300. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  301. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  302. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  303. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  304. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  305. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  306. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  307. package/skills/cometchat-android-v6/SKILL.md +0 -108
  308. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  309. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  310. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  311. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  312. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  313. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  314. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  315. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  316. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  317. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  318. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  319. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  320. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  321. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  322. package/skills/cometchat-angular-calls/SKILL.md +0 -380
  323. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  324. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  325. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  326. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  327. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  328. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  329. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  330. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  331. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  332. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  333. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  334. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  335. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  336. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  337. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  338. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  339. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  340. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  341. package/skills/cometchat-angular-components/SKILL.md +0 -235
  342. package/skills/cometchat-angular-core/SKILL.md +0 -386
  343. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  344. package/skills/cometchat-angular-features/SKILL.md +0 -329
  345. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  346. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  347. package/skills/cometchat-angular-production/SKILL.md +0 -564
  348. package/skills/cometchat-angular-push/SKILL.md +0 -389
  349. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  350. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  351. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  352. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  353. package/skills/cometchat-calls/SKILL.md +0 -364
  354. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  355. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  356. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  357. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  358. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  359. package/skills/cometchat-components/SKILL.md +0 -1142
  360. package/skills/cometchat-core/SKILL.md +0 -1048
  361. package/skills/cometchat-customization/SKILL.md +0 -580
  362. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  363. package/skills/cometchat-features/SKILL.md +0 -861
  364. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  365. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -455
  366. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  367. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  368. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  369. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  370. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  371. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  372. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  373. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  374. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  375. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  376. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  377. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  378. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  379. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  380. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  381. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  382. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  383. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  384. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  385. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  386. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  387. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  388. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  389. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  390. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  391. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  392. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  393. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  394. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  395. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  396. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  397. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  398. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  399. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  400. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  401. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  402. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  403. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  404. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  405. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  406. package/skills/cometchat-i18n/SKILL.md +0 -419
  407. package/skills/cometchat-ios/SKILL.md +0 -325
  408. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -181
  409. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  410. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  411. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  412. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  413. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  414. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  415. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  416. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  417. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  418. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  419. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  420. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  421. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  422. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  423. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  424. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  425. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  426. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  427. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  428. package/skills/cometchat-ios-production/SKILL.md +0 -738
  429. package/skills/cometchat-ios-testing/SKILL.md +0 -376
  430. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  431. package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
  432. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  433. package/skills/cometchat-native-calls/SKILL.md +0 -671
  434. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  435. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  436. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  437. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  438. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  439. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  440. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  441. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  442. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  443. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  444. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  445. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  446. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  447. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  448. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  449. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  450. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  451. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  452. package/skills/cometchat-native-components/SKILL.md +0 -628
  453. package/skills/cometchat-native-core/SKILL.md +0 -679
  454. package/skills/cometchat-native-customization/SKILL.md +0 -716
  455. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  456. package/skills/cometchat-native-features/SKILL.md +0 -638
  457. package/skills/cometchat-native-placement/SKILL.md +0 -509
  458. package/skills/cometchat-native-production/SKILL.md +0 -700
  459. package/skills/cometchat-native-push/SKILL.md +0 -594
  460. package/skills/cometchat-native-testing/SKILL.md +0 -582
  461. package/skills/cometchat-native-theming/SKILL.md +0 -681
  462. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  463. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  464. package/skills/cometchat-placement/SKILL.md +0 -1360
  465. package/skills/cometchat-production/SKILL.md +0 -1027
  466. package/skills/cometchat-react-calls/SKILL.md +0 -752
  467. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  468. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  469. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  470. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  471. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  472. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  473. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  474. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  475. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  476. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  477. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  478. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  479. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  480. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  481. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  482. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  483. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  484. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  485. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  486. package/skills/cometchat-react-push/SKILL.md +0 -634
  487. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  488. package/skills/cometchat-react-testing/SKILL.md +0 -413
  489. package/skills/cometchat-theming/SKILL.md +0 -498
  490. package/skills/cometchat-troubleshooting/SKILL.md +0 -294
@@ -1,753 +1,75 @@
1
1
  ---
2
2
  name: cometchat-ios-placement
3
- description: "WHERE to put CometChat in your iOS app — navigation patterns, tab bars, modals, and embedded views."
3
+ description: "Compose CometChat iOS screens into an app — navigation stack, tab bar, user/group pickers, group details, threads, and iPad. Use when the question is layout and navigation rather than a single component. Triggers: 'tab based chat ios', 'add a groups tab', 'open group details', 'thread screen ios', 'ipad split view cometchat'."
4
4
  license: "MIT"
5
- compatibility: "CometChatUIKitSwift ^5; iOS 13+"
5
+ compatibility: "CometChatUIKitSwift 5.1.22 · iOS 15.1+"
6
6
  metadata:
7
7
  author: "CometChat"
8
- version: "3.0.0"
9
- tags: "chat cometchat ios placement navigation tabs modal patterns"
8
+ version: "1.0.0"
9
+ tags: "cometchat ios placement navigation tabs threads swift v5"
10
10
  ---
11
11
 
12
- > **Ground truth:** `CometChatUIKitSwift ~> 5` view controllers + `docs/ui-kit/ios`. **Official docs:** https://www.cometchat.com/docs/ui-kit/ios/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
12
+ ## Companion skills (read first)
13
+ - `cometchat-ios-core` owns the default surface (list → pushed chat screen) and the five layout rules. This skill ADDS composition beyond that one screen. The five rules still apply to EVERY screen you add.
13
14
 
14
- ## Purpose
15
+ ## Use this skill when
16
+ "tab-based chat", "let people browse users and groups", "open group details", "add a thread screen", "make it work on iPad".
15
17
 
16
- This skill teaches WHERE to place CometChat components in your iOS app. It covers navigation patterns, tab bar integration, modal presentations, and embedded views for different use cases.
18
+ ## The shape of an iOS CometChat app
19
+ `UITabBarController` (yours) → per tab a `UINavigationController` (yours) → a kit list → **push your own chat screen**. The kit supplies screens; **you own every container and every transition**. There is no composite component and no built-in tab shell.
17
20
 
18
- ---
19
-
20
- ## 1. Navigation Stack Pattern
21
-
22
- The most common pattern for messaging apps. Push conversations onto a navigation stack.
23
-
24
- ### Basic Navigation Flow
25
-
26
- ```
27
- ┌─────────────────────────────────────────────────────────────┐
28
- │ UINavigationController │
29
- │ ┌─────────────────────────────────────────────────────────┐│
30
- │ │ CometChatConversations ││
31
- │ │ ┌─────────────────────────────────────────────────────┐││
32
- │ │ │ Conversation 1 │││
33
- │ │ │ Conversation 2 ──────────────────────────────────►│││
34
- │ │ │ Conversation 3 │││
35
- │ │ └─────────────────────────────────────────────────────┘││
36
- │ └─────────────────────────────────────────────────────────┘│
37
- └─────────────────────────────────────────────────────────────┘
38
-
39
-
40
- ┌─────────────────────────────────────────────────────────────┐
41
- │ MessagesViewController (pushed) │
42
- │ ┌─────────────────────────────────────────────────────────┐│
43
- │ │ CometChatMessageHeader ││
44
- │ ├─────────────────────────────────────────────────────────┤│
45
- │ │ CometChatMessageList ││
46
- │ │ ││
47
- │ │ ││
48
- │ ├─────────────────────────────────────────────────────────┤│
49
- │ │ CometChatMessageComposer ││
50
- │ └─────────────────────────────────────────────────────────┘│
51
- └─────────────────────────────────────────────────────────────┘
52
- ```
53
-
54
- ### Implementation (UIKit)
55
-
56
- ```swift
57
- // SceneDelegate.swift
58
- func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
59
- guard let windowScene = (scene as? UIWindowScene) else { return }
60
-
61
- let window = UIWindow(windowScene: windowScene)
62
-
63
- // Create conversations list
64
- let conversations = CometChatConversations()
65
- conversations.set(onItemClick: { [weak conversations] conversation, _ in
66
- let messagesVC = MessagesVC() // your own VC composing CometChatMessageHeader + List + Composer; see cometchat-ios-components § 12
67
- if let user = conversation.conversationWith as? User {
68
- messagesVC.user = user
69
- } else if let group = conversation.conversationWith as? Group {
70
- messagesVC.group = group
71
- }
72
- conversations?.navigationController?.pushViewController(messagesVC, animated: true)
73
- })
74
-
75
- // Wrap in navigation controller
76
- let navController = UINavigationController(rootViewController: conversations)
77
-
78
- window.rootViewController = navController
79
- self.window = window
80
- window.makeKeyAndVisible()
81
- }
82
- ```
83
-
84
- ### Implementation (SwiftUI)
85
-
86
- ```swift
87
- import SwiftUI
88
- import CometChatUIKitSwift
89
- import CometChatSDK
90
-
91
- struct ChatNavigationView: View {
92
- @State private var selectedConversation: Conversation?
93
- @State private var showMessages = false
94
-
95
- var body: some View {
96
- NavigationStack {
97
- ConversationsListView(selectedConversation: $selectedConversation)
98
- .navigationDestination(isPresented: $showMessages) {
99
- if let conversation = selectedConversation {
100
- MessagesView(conversation: conversation)
101
- }
102
- }
103
- .onChange(of: selectedConversation) { newValue in
104
- showMessages = newValue != nil
105
- }
106
- }
107
- }
108
- }
109
-
110
- struct ConversationsListView: UIViewControllerRepresentable {
111
- @Binding var selectedConversation: Conversation?
112
-
113
- func makeUIViewController(context: Context) -> CometChatConversations {
114
- let conversations = CometChatConversations()
115
- conversations.set(onItemClick: { conversation, _ in
116
- selectedConversation = conversation
117
- })
118
- return conversations
119
- }
120
-
121
- func updateUIViewController(_ uiViewController: CometChatConversations, context: Context) {}
122
- }
123
- ```
124
-
125
- ---
126
-
127
- ## 2. Tab Bar Pattern
128
-
129
- For apps where chat is one of several main features.
130
-
131
- ### Tab Layout
132
-
133
- ```
134
- ┌─────────────────────────────────────────────────────────────┐
135
- │ │
136
- │ Content Area │
137
- │ │
138
- │ │
139
- │ │
140
- ├─────────────────────────────────────────────────────────────┤
141
- │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
142
- │ │Home │ │Chats│ │Users│ │Groups│ │Calls│ │
143
- │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │
144
- └─────────────────────────────────────────────────────────────┘
145
- ```
146
-
147
- ### Implementation (UIKit)
148
-
149
- ```swift
150
- import UIKit
151
- import CometChatUIKitSwift
152
- import CometChatSDK
153
-
154
- class MainTabBarController: UITabBarController {
155
-
156
- override func viewDidLoad() {
157
- super.viewDidLoad()
158
- setupTabs()
159
- }
160
-
161
- private func setupTabs() {
162
- // Home tab (your existing content)
163
- let homeVC = HomeViewController()
164
- homeVC.tabBarItem = UITabBarItem(
165
- title: "Home",
166
- image: UIImage(systemName: "house"),
167
- selectedImage: UIImage(systemName: "house.fill")
168
- )
169
-
170
- // Chats tab
171
- let chatsVC = createChatsTab()
172
- let chatsNav = UINavigationController(rootViewController: chatsVC)
173
- chatsNav.tabBarItem = UITabBarItem(
174
- title: "Chats",
175
- image: UIImage(systemName: "message"),
176
- selectedImage: UIImage(systemName: "message.fill")
177
- )
178
-
179
- // Users tab
180
- let usersVC = CometChatUsers()
181
- usersVC.set(onItemClick: { [weak self] user, _ in
182
- self?.openMessages(with: user)
183
- })
184
- let usersNav = UINavigationController(rootViewController: usersVC)
185
- usersNav.tabBarItem = UITabBarItem(
186
- title: "Users",
187
- image: UIImage(systemName: "person.2"),
188
- selectedImage: UIImage(systemName: "person.2.fill")
189
- )
190
-
191
- // Groups tab
192
- let groupsVC = CometChatGroups()
193
- groupsVC.set(onItemClick: { [weak self] group, _ in
194
- self?.openMessages(with: group)
195
- })
196
- let groupsNav = UINavigationController(rootViewController: groupsVC)
197
- groupsNav.tabBarItem = UITabBarItem(
198
- title: "Groups",
199
- image: UIImage(systemName: "person.3"),
200
- selectedImage: UIImage(systemName: "person.3.fill")
201
- )
202
-
203
- var tabs: [UIViewController] = [
204
- UINavigationController(rootViewController: homeVC),
205
- chatsNav,
206
- usersNav,
207
- groupsNav
208
- ]
209
-
210
- // Calls tab - only available if CometChatCallsSDK is installed
211
- #if canImport(CometChatCallsSDK)
212
- let callsVC = CometChatCallLogs()
213
- let callsNav = UINavigationController(rootViewController: callsVC)
214
- callsNav.tabBarItem = UITabBarItem(
215
- title: "Calls",
216
- image: UIImage(systemName: "phone"),
217
- selectedImage: UIImage(systemName: "phone.fill")
218
- )
219
- tabs.append(callsNav)
220
- #endif
221
-
222
- viewControllers = tabs
223
- }
224
-
225
- private func createChatsTab() -> CometChatConversations {
226
- let conversations = CometChatConversations()
227
- conversations.set(onItemClick: { [weak self] conversation, _ in
228
- if let user = conversation.conversationWith as? User {
229
- self?.openMessages(with: user)
230
- } else if let group = conversation.conversationWith as? Group {
231
- self?.openMessages(with: group)
232
- }
233
- })
234
- return conversations
235
- }
236
-
237
- private func openMessages(with user: User) {
238
- let messagesVC = MessagesVC() // your own VC composing CometChatMessageHeader + List + Composer; see cometchat-ios-components § 12
239
- messagesVC.user = user
240
- messagesVC.hidesBottomBarWhenPushed = true
241
-
242
- if let navController = selectedViewController as? UINavigationController {
243
- navController.pushViewController(messagesVC, animated: true)
244
- }
245
- }
246
-
247
- private func openMessages(with group: Group) {
248
- let messagesVC = MessagesVC() // your own VC composing CometChatMessageHeader + List + Composer; see cometchat-ios-components § 12
249
- messagesVC.group = group
250
- messagesVC.hidesBottomBarWhenPushed = true
251
-
252
- if let navController = selectedViewController as? UINavigationController {
253
- navController.pushViewController(messagesVC, animated: true)
254
- }
255
- }
256
- }
257
- ```
258
-
259
- ### Implementation (SwiftUI)
260
-
261
- ```swift
262
- struct MainTabView: View {
263
- @State private var selectedTab = 0
264
-
265
- var body: some View {
266
- TabView(selection: $selectedTab) {
267
- HomeView()
268
- .tabItem {
269
- Label("Home", systemImage: "house")
270
- }
271
- .tag(0)
272
-
273
- ChatNavigationView()
274
- .tabItem {
275
- Label("Chats", systemImage: "message")
276
- }
277
- .tag(1)
278
-
279
- UsersNavigationView()
280
- .tabItem {
281
- Label("Users", systemImage: "person.2")
282
- }
283
- .tag(2)
284
-
285
- GroupsNavigationView()
286
- .tabItem {
287
- Label("Groups", systemImage: "person.3")
288
- }
289
- .tag(3)
290
-
291
- CallsNavigationView()
292
- .tabItem {
293
- Label("Calls", systemImage: "phone")
294
- }
295
- .tag(4)
296
- }
297
- }
298
- }
299
- ```
300
-
301
- ---
302
-
303
- ## 3. Modal Presentation Pattern
304
-
305
- For apps where chat is a secondary feature, presented modally.
306
-
307
- ### Modal Layout
308
-
309
- ```
310
- ┌─────────────────────────────────────────────────────────────┐
311
- │ Your App Content │
312
- │ │
313
- │ ┌─────────────────────────────────────────────────────────┐│
314
- │ │ Product Details ││
315
- │ │ ││
316
- │ │ ┌─────────────────────────────────────────────────────┐││
317
- │ │ │ [Chat with Seller] ◄─────────────────────────────│││
318
- │ │ └─────────────────────────────────────────────────────┘││
319
- │ └─────────────────────────────────────────────────────────┘│
320
- └─────────────────────────────────────────────────────────────┘
321
-
322
- ▼ (modal presentation)
323
- ┌─────────────────────────────────────────────────────────────┐
324
- │ ┌─────────────────────────────────────────────────────────┐│
325
- │ │ [X] Chat with John ││
326
- │ ├─────────────────────────────────────────────────────────┤│
327
- │ │ ││
328
- │ │ Messages ││
329
- │ │ ││
330
- │ ├─────────────────────────────────────────────────────────┤│
331
- │ │ Composer ││
332
- │ └─────────────────────────────────────────────────────────┘│
333
- └─────────────────────────────────────────────────────────────┘
334
- ```
335
-
336
- ### Implementation (UIKit)
337
-
338
- ```swift
339
- class ProductDetailViewController: UIViewController {
340
-
341
- var sellerUID: String?
342
-
343
- @IBAction func chatWithSellerTapped(_ sender: UIButton) {
344
- guard let sellerUID = sellerUID else { return }
345
-
346
- // Fetch the seller user
347
- CometChat.getUser(UID: sellerUID) { [weak self] user in
348
- guard let user = user else { return }
349
-
350
- DispatchQueue.main.async {
351
- let messagesVC = MessagesVC() // your own VC composing CometChatMessageHeader + List + Composer; see cometchat-ios-components § 12
352
- messagesVC.user = user
353
-
354
- let navController = UINavigationController(rootViewController: messagesVC)
355
- navController.modalPresentationStyle = .pageSheet
356
-
357
- // Add close button
358
- messagesVC.navigationItem.leftBarButtonItem = UIBarButtonItem(
359
- barButtonSystemItem: .close,
360
- target: self,
361
- action: #selector(self?.dismissChat)
362
- )
363
-
364
- self?.present(navController, animated: true)
365
- }
366
- } onError: { error in
367
- print("Error fetching user: \(error?.errorDescription ?? "")")
368
- }
369
- }
370
-
371
- @objc private func dismissChat() {
372
- dismiss(animated: true)
373
- }
374
- }
375
- ```
21
+ ## Recipes
22
+ **The kit's lists draw their OWN navigation bar — the host's `navigationItem` is unused.** Setting `navigationItem.rightBarButtonItems` (a "New Group" button is the first thing anyone adds) silently renders NOTHING: measured with the button installed and both bars inspected, the control never appears, and setting `hideNavigationBar = true` removes the visible bar, proving it is the kit's. Put custom controls in the kit's own affordances — `CometChatMessageHeader.set(options:)` for the header overflow menu, or assign the list components' `menus` property (`[UIBarButtonItem]?`) — there is **no** `set(menus:)` method; `menus` is a settable property, not a setter. Otherwise hide the kit bar and use your own — do not attach them to a `navigationItem` nobody draws.
376
23
 
377
- ### Implementation (SwiftUI)
24
+ **Tabs.** One `UINavigationController` per tab, each rooted at `CometChatConversations` / `CometChatUsers` / `CometChatGroups` / `CometChatCallLogs`. Every list's selection callback pushes your chat screen — wire all of them, or a tab dead-ends.
378
25
 
379
26
  ```swift
380
- struct ProductDetailView: View {
381
- let sellerUID: String
382
- @State private var showChat = false
383
- @State private var seller: User?
384
-
385
- var body: some View {
386
- VStack {
387
- // Product details...
388
-
389
- Button("Chat with Seller") {
390
- fetchSellerAndShowChat()
391
- }
392
- .buttonStyle(.borderedProminent)
393
- }
394
- .sheet(isPresented: $showChat) {
395
- if let seller = seller {
396
- NavigationStack {
397
- MessagesView(user: seller)
398
- .toolbar {
399
- ToolbarItem(placement: .navigationBarLeading) {
400
- Button("Close") {
401
- showChat = false
402
- }
403
- }
404
- }
405
- }
406
- }
407
- }
408
- }
409
-
410
- private func fetchSellerAndShowChat() {
411
- CometChat.getUser(UID: sellerUID) { user in
412
- DispatchQueue.main.async {
413
- self.seller = user
414
- self.showChat = true
415
- }
416
- } onError: { error in
417
- print("Error: \(error?.errorDescription ?? "")")
418
- }
419
- }
27
+ // Tab-based placement — wire each list's selection to the chat screen.
28
+ // set(onItemClick:) is TWO-arg on the lists: (item, indexPath). A one-arg `{ user in … }` does
29
+ // NOT compile ("expects 2 arguments, but 1 was used") — take the indexPath and ignore it.
30
+ let users = CometChatUsers()
31
+ users.set(onItemClick: { user, _ in openChat(user: user, group: nil) })
32
+
33
+ let groups = CometChatGroups()
34
+ groups.set(onItemClick: { group, _ in openChat(user: nil, group: group) })
35
+
36
+ // Global search — presented from the conversations list's onSearchClick property.
37
+ // CometChatSearch's result callbacks are assignable PROPERTIES, not setters — ASSIGN them
38
+ // (`search.onConversationClicked = …`). There is no setter form; wrapping either callback in a
39
+ // `set(...)` call does not compile (it resolves to a different overload). onConversationClicked
40
+ // is (Conversation, IndexPath); onMessageClicked is (BaseMessage).
41
+ let conversations = CometChatConversations()
42
+ conversations.onSearchClick = {
43
+ let search = CometChatSearch()
44
+ search.onConversationClicked = { conv, _ in
45
+ self.dismiss(animated: false); openChatFromConversation(conv)
46
+ }
47
+ search.onMessageClicked = { msg in
48
+ self.dismiss(animated: false); openChatFromMessage(msg)
49
+ }
50
+ self.present(search, animated: true)
420
51
  }
421
52
  ```
422
53
 
423
- ---
424
-
425
- ## 4. Floating Button Pattern
426
-
427
- For support chat or quick access to messages.
428
-
429
- ### Floating Button Layout
430
-
431
- ```
432
- ┌─────────────────────────────────────────────────────────────┐
433
- │ Your App Content │
434
- │ │
435
- │ │
436
- │ │
437
- │ │
438
- │ │
439
- │ │
440
- │ ┌─────┐ │
441
- │ │ 💬 │ │
442
- │ └─────┘ │
443
- └─────────────────────────────────────────────────────────────┘
444
- ```
445
-
446
- ### Implementation (UIKit)
447
-
448
- ```swift
449
- class FloatingChatButton: UIButton {
450
-
451
- private var unreadCount: Int = 0 {
452
- didSet {
453
- updateBadge()
454
- }
455
- }
456
-
457
- private lazy var badgeLabel: UILabel = {
458
- let label = UILabel()
459
- label.backgroundColor = .systemRed
460
- label.textColor = .white
461
- label.font = .systemFont(ofSize: 12, weight: .bold)
462
- label.textAlignment = .center
463
- label.layer.cornerRadius = 10
464
- label.clipsToBounds = true
465
- label.isHidden = true
466
- return label
467
- }()
468
-
469
- override init(frame: CGRect) {
470
- super.init(frame: frame)
471
- setupButton()
472
- }
473
-
474
- required init?(coder: NSCoder) {
475
- super.init(coder: coder)
476
- setupButton()
477
- }
478
-
479
- private func setupButton() {
480
- backgroundColor = .systemBlue
481
- layer.cornerRadius = 28
482
- layer.shadowColor = UIColor.black.cgColor
483
- layer.shadowOffset = CGSize(width: 0, height: 4)
484
- layer.shadowRadius = 8
485
- layer.shadowOpacity = 0.3
486
-
487
- setImage(UIImage(systemName: "message.fill"), for: .normal)
488
- tintColor = .white
489
-
490
- addSubview(badgeLabel)
491
- badgeLabel.translatesAutoresizingMaskIntoConstraints = false
492
- NSLayoutConstraint.activate([
493
- badgeLabel.topAnchor.constraint(equalTo: topAnchor, constant: -5),
494
- badgeLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: 5),
495
- badgeLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 20),
496
- badgeLabel.heightAnchor.constraint(equalToConstant: 20)
497
- ])
498
- }
499
-
500
- private func updateBadge() {
501
- badgeLabel.isHidden = unreadCount == 0
502
- badgeLabel.text = unreadCount > 99 ? "99+" : "\(unreadCount)"
503
- }
504
-
505
- func setUnreadCount(_ count: Int) {
506
- unreadCount = count
507
- }
508
- }
54
+ **Users or groups → chat.** `CometChatUsers.set(onItemClick:)` gives a `User`; `CometChatGroups.set(onItemClick:)` gives a `Group`. Pass exactly one to your chat screen — the same single-target rule as core.
509
55
 
510
- // Usage in a view controller
511
- class MainViewController: UIViewController {
512
-
513
- private lazy var chatButton: FloatingChatButton = {
514
- let button = FloatingChatButton()
515
- button.addTarget(self, action: #selector(openChat), for: .touchUpInside)
516
- return button
517
- }()
518
-
519
- override func viewDidLoad() {
520
- super.viewDidLoad()
521
- setupFloatingButton()
522
- }
523
-
524
- private func setupFloatingButton() {
525
- view.addSubview(chatButton)
526
- chatButton.translatesAutoresizingMaskIntoConstraints = false
527
- NSLayoutConstraint.activate([
528
- chatButton.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -20),
529
- chatButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -20),
530
- chatButton.widthAnchor.constraint(equalToConstant: 56),
531
- chatButton.heightAnchor.constraint(equalToConstant: 56)
532
- ])
533
- }
534
-
535
- @objc private func openChat() {
536
- let conversations = CometChatConversations()
537
- conversations.set(onItemClick: { [weak self] conversation, _ in
538
- let messagesVC = MessagesVC() // your own VC composing CometChatMessageHeader + List + Composer; see cometchat-ios-components § 12
539
- if let user = conversation.conversationWith as? User {
540
- messagesVC.user = user
541
- } else if let group = conversation.conversationWith as? Group {
542
- messagesVC.group = group
543
- }
544
- conversations.navigationController?.pushViewController(messagesVC, animated: true)
545
- })
546
-
547
- let navController = UINavigationController(rootViewController: conversations)
548
- navController.modalPresentationStyle = .pageSheet
549
-
550
- conversations.navigationItem.leftBarButtonItem = UIBarButtonItem(
551
- barButtonSystemItem: .close,
552
- target: self,
553
- action: #selector(dismissChat)
554
- )
555
-
556
- present(navController, animated: true)
557
- }
558
-
559
- @objc private func dismissChat() {
560
- dismiss(animated: true)
561
- }
562
- }
563
- ```
56
+ **Group details / members.** `CometChatMessageHeader` has **no tap callback** — no `onItemClick`. Its only interactive surface is `set(options:)` taking `[CometChatPopupMenu.MenuItem]`, so a details/members screen is an overflow **menu item** you add, not a tap on the title. From that action, push `CometChatGroupMembers` — **which has NO `init(group:)`; construct it `init()` then attach the group with the setter** (`let members = CometChatGroupMembers(); members.set(group: group)` — guessing `CometChatGroupMembers(group:)` fails to compile, "argument passed to call that takes no arguments"). Two more things about it are not obvious:
564
57
 
565
- ---
58
+ - **When PUSHED, hide the KIT's bar or the user is stranded.** The kit draws a modal-style bar whose Cancel calls `dismiss()` — a no-op on a pushed controller — and `set(onBack:)` never fires from it (diagnosed on a tab-bar app; the same control works when the component is PRESENTED as a sheet). So: `members.hideNavigationBar = true; members.title = "Members"` and let the HOST navigation bar provide Back — measured working, edge-swipe included. This is the inverse of the chat screen's rule 5: a pushed kit LIST keeps the host bar.
59
+ - **Kick, ban and scope-change are BUILT IN — do not hand-roll them.** `hideKickMemberOption` / `hideBanMemberOption` / `hideScopeChangeOption` all default to false, and tapping a row already presents the kit's own `CometChatScopeChange` sheet. Wiring your own `set(onItemClick:)` on top produces a DOUBLE presentation (measured). Only add `set(onItemClick:)` if you first hide the built-in options.
566
60
 
567
- ## 5. Split View Pattern (iPad)
61
+ Adding members has **no component** — build a picker from `CometChatUsers` in selection mode and call `CometChat.addMembersToGroup(guid:groupMembers:bannedUIDs:onSuccess:onError:)` (SDK fallback; `docs-map.md`).
568
62
 
569
- For iPad apps with master-detail layout.
63
+ **Threads.** `CometChatMessageList.set(onThreadRepliesClick:)` pushes a thread screen: `CometChatThreadedMessageHeader` + a thread list + composer. **Thread scoping — the LIST takes its parent in the SAME call as its target.** `CometChatMessageList.set(user:parentMessage:withParent:)` (or `set(group:parentMessage:)`). A separate `set(user:)` followed by `set(parentMessageId:)` does NOT scope the list: the first call already built a request for the whole conversation, so the thread screen renders the entire conversation with the parent in it. The COMPOSER is different — `set(user:)` then `set(parentMessageId:)`. The header takes `set(parentMessage:)`. **Three components, three shapes** — verified against the shipped 5.1.22 interface by compiling each.
570
64
 
571
- ### Split View Layout
65
+ **Search.** `CometChatConversations.onSearchClick` (a property) presents `CometChatSearch`. Anything you PRESENT owns its dismissal; anything you PUSH gets a back control free.
572
66
 
573
- ```
574
- ┌─────────────────────────────────────────────────────────────────────────────┐
575
- │ ┌─────────────────────────┐ ┌─────────────────────────────────────────────┐│
576
- │ │ Conversations │ │ Messages ││
577
- │ │ ┌─────────────────────┐│ │ ┌─────────────────────────────────────────┐││
578
- │ │ │ John Doe ││ │ │ Header │││
579
- │ │ │ Jane Smith ◄──────┼┼──┼──┤─────────────────────────────────────────│││
580
- │ │ │ Team Chat ││ │ │ Message List │││
581
- │ │ │ ││ │ │ │││
582
- │ │ │ ││ │ │ │││
583
- │ │ │ ││ │ ├─────────────────────────────────────────┤││
584
- │ │ │ ││ │ │ Composer │││
585
- │ │ └─────────────────────┘│ │ └─────────────────────────────────────────┘││
586
- │ └─────────────────────────┘ └─────────────────────────────────────────────┘│
587
- └─────────────────────────────────────────────────────────────────────────────┘
588
- ```
589
-
590
- ### Implementation (UIKit)
591
-
592
- ```swift
593
- class ChatSplitViewController: UISplitViewController {
594
-
595
- override func viewDidLoad() {
596
- super.viewDidLoad()
597
-
598
- preferredDisplayMode = .oneBesideSecondary
599
- preferredSplitBehavior = .tile
600
-
601
- // Primary: Conversations
602
- let conversations = CometChatConversations()
603
- conversations.set(onItemClick: { [weak self] conversation, _ in
604
- self?.showMessages(for: conversation)
605
- })
606
- let primaryNav = UINavigationController(rootViewController: conversations)
607
-
608
- // Secondary: Empty state or messages
609
- let emptyVC = EmptyStateViewController()
610
- let secondaryNav = UINavigationController(rootViewController: emptyVC)
611
-
612
- viewControllers = [primaryNav, secondaryNav]
613
- }
614
-
615
- private func showMessages(for conversation: Conversation) {
616
- let messagesVC = MessagesVC() // your own VC composing CometChatMessageHeader + List + Composer; see cometchat-ios-components § 12
617
-
618
- if let user = conversation.conversationWith as? User {
619
- messagesVC.user = user
620
- } else if let group = conversation.conversationWith as? Group {
621
- messagesVC.group = group
622
- }
623
-
624
- let secondaryNav = UINavigationController(rootViewController: messagesVC)
625
- showDetailViewController(secondaryNav, sender: self)
626
- }
627
- }
628
-
629
- class EmptyStateViewController: UIViewController {
630
- override func viewDidLoad() {
631
- super.viewDidLoad()
632
- view.backgroundColor = .systemBackground
633
-
634
- let label = UILabel()
635
- label.text = "Select a conversation"
636
- label.textColor = .secondaryLabel
637
- label.textAlignment = .center
638
-
639
- view.addSubview(label)
640
- label.translatesAutoresizingMaskIntoConstraints = false
641
- NSLayoutConstraint.activate([
642
- label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
643
- label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
644
- ])
645
- }
646
- }
647
- ```
648
-
649
- ---
650
-
651
- ## 6. Embedded View Pattern
652
-
653
- For embedding chat in a portion of the screen.
654
-
655
- ### Embedded Layout
656
-
657
- ```
658
- ┌─────────────────────────────────────────────────────────────┐
659
- │ Your App Header │
660
- ├─────────────────────────────────────────────────────────────┤
661
- │ ┌─────────────────────────────────────────────────────────┐│
662
- │ │ Your Content ││
663
- │ │ ││
664
- │ └─────────────────────────────────────────────────────────┘│
665
- ├─────────────────────────────────────────────────────────────┤
666
- │ ┌─────────────────────────────────────────────────────────┐│
667
- │ │ Embedded Chat (CometChatMessageList + Composer) ││
668
- │ │ ││
669
- │ └─────────────────────────────────────────────────────────┘│
670
- └─────────────────────────────────────────────────────────────┘
671
- ```
672
-
673
- ### Implementation (UIKit)
674
-
675
- ```swift
676
- class EmbeddedChatViewController: UIViewController {
677
-
678
- private var supportUser: User?
679
-
680
- private lazy var chatContainer: UIView = {
681
- let view = UIView()
682
- view.backgroundColor = .systemBackground
683
- view.layer.cornerRadius = 12
684
- view.clipsToBounds = true
685
- return view
686
- }()
687
-
688
- private lazy var messageList = CometChatMessageList()
689
- private lazy var messageComposer = CometChatMessageComposer()
690
-
691
- override func viewDidLoad() {
692
- super.viewDidLoad()
693
- setupUI()
694
- fetchSupportUser()
695
- }
696
-
697
- private func setupUI() {
698
- view.addSubview(chatContainer)
699
- chatContainer.translatesAutoresizingMaskIntoConstraints = false
700
-
701
- chatContainer.addSubview(messageList)
702
- chatContainer.addSubview(messageComposer)
703
-
704
- messageList.translatesAutoresizingMaskIntoConstraints = false
705
- messageComposer.translatesAutoresizingMaskIntoConstraints = false
706
-
707
- NSLayoutConstraint.activate([
708
- // Chat container takes bottom half of screen
709
- chatContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16),
710
- chatContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16),
711
- chatContainer.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16),
712
- chatContainer.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.4),
713
-
714
- // Message list
715
- messageList.topAnchor.constraint(equalTo: chatContainer.topAnchor),
716
- messageList.leadingAnchor.constraint(equalTo: chatContainer.leadingAnchor),
717
- messageList.trailingAnchor.constraint(equalTo: chatContainer.trailingAnchor),
718
- messageList.bottomAnchor.constraint(equalTo: messageComposer.topAnchor),
719
-
720
- // Composer
721
- messageComposer.leadingAnchor.constraint(equalTo: chatContainer.leadingAnchor),
722
- messageComposer.trailingAnchor.constraint(equalTo: chatContainer.trailingAnchor),
723
- messageComposer.bottomAnchor.constraint(equalTo: chatContainer.bottomAnchor)
724
- ])
725
- }
726
-
727
- private func fetchSupportUser() {
728
- CometChat.getUser(UID: "support-agent") { [weak self] user in
729
- guard let user = user else { return }
730
- DispatchQueue.main.async {
731
- self?.supportUser = user
732
- self?.messageList.set(user: user)
733
- self?.messageList.set(controller: self) // mandatory — see cometchat-ios-components § 4/§ 6
734
- self?.messageComposer.set(user: user)
735
- self?.messageComposer.set(controller: self) // mandatory — enables attachments/sheets
736
- }
737
- } onError: { error in
738
- print("Error: \(error?.errorDescription ?? "")")
739
- }
740
- }
741
- }
742
- ```
743
-
744
- ---
67
+ **iPad.** `UISplitViewController` with the list as primary and your chat screen as secondary. The kit components fill what you give them, so each column still needs the core layout rules applied independently.
745
68
 
746
- ## Best Practices
69
+ ## Gotchas
70
+ - **Selection multiplies the dead-end risk.** Every list you add is another callback that must go somewhere.
71
+ - **Hide the host nav bar only on screens that use the kit header**, and restore it in `viewWillDisappear` — otherwise the rest of the app loses its bar.
72
+ - **Modals need explicit dismissal.** A presented screen with no way out is the iOS form of an unwired back button.
747
73
 
748
- 1. **Always wrap in UINavigationController** when presenting CometChat view controllers
749
- 2. **Hide tab bar when pushing messages** using `hidesBottomBarWhenPushed = true`
750
- 3. **Handle keyboard properly** — CometChat components handle this automatically
751
- 4. **Support both orientations** — components adapt to orientation changes
752
- 5. **Test on iPad** — use split view for better iPad experience
753
- 6. **Handle deep links** — navigate to specific conversations from push notifications
74
+ ## Verify it works
75
+ Every tab reaches a chat screen; every pushed screen returns; every presented screen dismisses; the composer clears the keyboard on all of them; rotation and iPhone SE → Pro Max keep the surface full-bleed.