@cometchat/skills 4.4.1 → 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 (489) 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/README.md +41 -163
  5. package/RULES.md +114 -0
  6. package/bin/cometchat-skills.mjs +1180 -0
  7. package/bin/legacy-skills.json +95 -0
  8. package/catalogs/android-v6.json +1646 -0
  9. package/catalogs/flutter-v6.json +651 -0
  10. package/catalogs/ios-v5.json +1383 -0
  11. package/catalogs/rn-calls-v5.json +134 -0
  12. package/catalogs/rn-calls-v5.symbols.txt +58 -0
  13. package/catalogs/rn-sdk-v4.json +672 -0
  14. package/catalogs/rn-v5.json +449 -0
  15. package/catalogs/rn-v5.symbols.txt +216 -0
  16. package/catalogs/sdk-android-v5.json +514 -0
  17. package/contracts.android-calls-v5.json +122 -0
  18. package/contracts.android-v6.json +135 -0
  19. package/contracts.angular-v5.json +694 -0
  20. package/contracts.flutter-calls-v5.json +77 -0
  21. package/contracts.flutter-v6.json +126 -0
  22. package/contracts.ios-calls-v5.json +67 -0
  23. package/contracts.ios-v5.json +436 -0
  24. package/contracts.json +82 -0
  25. package/contracts.rn-calls-v5.json +77 -0
  26. package/contracts.rn-v5.json +727 -0
  27. package/contracts.sdk-android-v5.json +15 -0
  28. package/contracts.web-calls-v5.json +45 -0
  29. package/features.android-calls-v5.json +246 -0
  30. package/features.android-v6.json +65 -0
  31. package/features.angular-v5.json +521 -0
  32. package/features.flutter-calls-v5.json +286 -0
  33. package/features.flutter-v6.json +484 -0
  34. package/features.ios-calls-v5.json +236 -0
  35. package/features.ios-v5.json +573 -0
  36. package/features.json +61 -0
  37. package/features.rn-calls-v5.json +187 -0
  38. package/features.rn-v5.json +614 -0
  39. package/features.sdk-android-v5.json +40 -0
  40. package/features.sdk-jsv4.json +24 -0
  41. package/features.web-calls-v5.json +108 -0
  42. package/package.json +151 -74
  43. package/peers.yaml +312 -0
  44. package/registry/README.md +31 -0
  45. package/registry/android-calls-v5.json +54 -0
  46. package/registry/android-v6.json +137 -0
  47. package/registry/angular-v5.json +114 -0
  48. package/registry/flutter-calls-v5.json +54 -0
  49. package/registry/flutter-v6.json +119 -0
  50. package/registry/ios-calls-v5.json +59 -0
  51. package/registry/ios-v5.json +97 -0
  52. package/registry/rn-calls-v5.json +59 -0
  53. package/registry/rn-v5.json +129 -0
  54. package/registry/sdk-android-v5.json +53 -0
  55. package/registry/sdk-jsv4.json +53 -0
  56. package/registry/web-calls-v5.json +54 -0
  57. package/registry/web-v7.json +99 -0
  58. package/skills/cometchat/SKILL.md +42 -2096
  59. package/skills/cometchat-android-v5-calls-sdk/SKILL.md +206 -0
  60. package/skills/cometchat-android-v5-calls-sdk/references/build-truth.md +63 -0
  61. package/skills/cometchat-android-v5-calls-sdk/references/docs-map.md +119 -0
  62. package/skills/cometchat-android-v5-calls-sdk/references/method-map.md +53 -0
  63. package/skills/cometchat-android-v5-calls-sdk/references/pitfalls.md +72 -0
  64. package/skills/cometchat-android-v5-calls-sdk/references/ringing.md +92 -0
  65. package/skills/cometchat-android-v5-calls-sdk/references/user-switch.md +90 -0
  66. package/skills/cometchat-android-v5-sdk/SKILL.md +127 -0
  67. package/skills/cometchat-android-v5-sdk/references/app-surface.md +88 -0
  68. package/skills/cometchat-android-v5-sdk/references/docs-map.md +91 -0
  69. package/skills/cometchat-android-v6-builder-settings/SKILL.md +51 -137
  70. package/skills/cometchat-android-v6-calls/SKILL.md +128 -411
  71. package/skills/cometchat-android-v6-compose-components/SKILL.md +84 -194
  72. package/skills/cometchat-android-v6-compose-customization/SKILL.md +66 -411
  73. package/skills/cometchat-android-v6-compose-placement/SKILL.md +154 -237
  74. package/skills/cometchat-android-v6-core/SKILL.md +236 -672
  75. package/skills/cometchat-android-v6-core/references/anti-patterns.md +31 -0
  76. package/skills/cometchat-android-v6-core/references/component-props.md +168 -0
  77. package/skills/cometchat-android-v6-core/references/docs-map.md +153 -0
  78. package/skills/cometchat-android-v6-core/references/layout.md +112 -0
  79. package/skills/cometchat-android-v6-core/references/lifecycle.md +75 -0
  80. package/skills/cometchat-android-v6-core/references/setup-credentials.md +105 -0
  81. package/skills/cometchat-android-v6-core/references/troubleshooting.md +36 -0
  82. package/skills/cometchat-android-v6-events/SKILL.md +46 -184
  83. package/skills/cometchat-android-v6-extensions/SKILL.md +39 -179
  84. package/skills/cometchat-android-v6-features/SKILL.md +74 -143
  85. package/skills/cometchat-android-v6-kotlin-components/SKILL.md +75 -193
  86. package/skills/cometchat-android-v6-kotlin-customization/SKILL.md +67 -419
  87. package/skills/cometchat-android-v6-kotlin-placement/SKILL.md +77 -223
  88. package/skills/cometchat-android-v6-migration/SKILL.md +67 -378
  89. package/skills/cometchat-android-v6-production/SKILL.md +40 -179
  90. package/skills/cometchat-android-v6-push/SKILL.md +39 -289
  91. package/skills/cometchat-android-v6-testing/SKILL.md +50 -265
  92. package/skills/cometchat-android-v6-troubleshooting/SKILL.md +70 -254
  93. package/skills/cometchat-angular-v5-calls/SKILL.md +193 -0
  94. package/skills/cometchat-angular-v5-components/SKILL.md +131 -0
  95. package/skills/cometchat-angular-v5-components/references/catalog.md +111 -0
  96. package/skills/cometchat-angular-v5-components/references/host-composed.md +46 -0
  97. package/skills/cometchat-angular-v5-core/SKILL.md +300 -0
  98. package/skills/cometchat-angular-v5-core/references/anti-patterns.md +49 -0
  99. package/skills/cometchat-angular-v5-core/references/component-props.md +55 -0
  100. package/skills/cometchat-angular-v5-core/references/dependencies.md +66 -0
  101. package/skills/cometchat-angular-v5-core/references/docs-map.md +132 -0
  102. package/skills/cometchat-angular-v5-core/references/layout.md +64 -0
  103. package/skills/cometchat-angular-v5-core/references/lifecycle.md +202 -0
  104. package/skills/cometchat-angular-v5-core/references/setup-credentials.md +137 -0
  105. package/skills/cometchat-angular-v5-core/references/theming.md +70 -0
  106. package/skills/cometchat-angular-v5-core/references/troubleshooting.md +27 -0
  107. package/skills/cometchat-angular-v5-customization/SKILL.md +94 -0
  108. package/skills/cometchat-angular-v5-features/SKILL.md +107 -0
  109. package/skills/cometchat-angular-v5-features/references/custom-messages.md +133 -0
  110. package/skills/cometchat-angular-v5-features/references/formatters.md +28 -0
  111. package/skills/cometchat-angular-v5-features/references/host-composed-extensions.md +85 -0
  112. package/skills/cometchat-angular-v5-migration/SKILL.md +40 -0
  113. package/skills/cometchat-angular-v5-migration/references/migration-guide.md +165 -0
  114. package/skills/cometchat-angular-v5-patterns/SKILL.md +107 -0
  115. package/skills/cometchat-angular-v5-placement/SKILL.md +133 -0
  116. package/skills/cometchat-angular-v5-placement/references/combined-app.md +174 -0
  117. package/skills/cometchat-angular-v5-placement/references/core-surface.md +199 -0
  118. package/skills/cometchat-angular-v5-production/SKILL.md +101 -0
  119. package/skills/cometchat-angular-v5-push/SKILL.md +61 -0
  120. package/skills/cometchat-angular-v5-testing/SKILL.md +112 -0
  121. package/skills/cometchat-angular-v5-troubleshooting/SKILL.md +96 -0
  122. package/skills/cometchat-flutter-v5-sdk/SKILL.md +188 -0
  123. package/skills/cometchat-flutter-v5-sdk/references/doc-corrections.md +55 -0
  124. package/skills/cometchat-flutter-v5-sdk/references/docs-map.md +211 -0
  125. package/skills/cometchat-flutter-v5-sdk/references/platform-notes.md +48 -0
  126. package/skills/cometchat-flutter-v5-sdk/references/transcription.md +87 -0
  127. package/skills/cometchat-flutter-v6-calls/SKILL.md +75 -387
  128. package/skills/cometchat-flutter-v6-components/SKILL.md +88 -361
  129. package/skills/cometchat-flutter-v6-core/SKILL.md +154 -593
  130. package/skills/cometchat-flutter-v6-core/references/anti-patterns.md +55 -0
  131. package/skills/cometchat-flutter-v6-core/references/docs-map.md +143 -0
  132. package/skills/cometchat-flutter-v6-core/references/layout.md +45 -0
  133. package/skills/cometchat-flutter-v6-core/references/lifecycle.md +87 -0
  134. package/skills/cometchat-flutter-v6-core/references/setup-credentials.md +84 -0
  135. package/skills/cometchat-flutter-v6-core/references/troubleshooting.md +26 -0
  136. package/skills/cometchat-flutter-v6-customization/SKILL.md +70 -712
  137. package/skills/cometchat-flutter-v6-events/SKILL.md +79 -174
  138. package/skills/cometchat-flutter-v6-features/SKILL.md +55 -394
  139. package/skills/cometchat-flutter-v6-migration/SKILL.md +68 -367
  140. package/skills/cometchat-flutter-v6-migration/references/migration-guide.md +131 -0
  141. package/skills/cometchat-flutter-v6-patterns/SKILL.md +61 -0
  142. package/skills/cometchat-flutter-v6-placement/SKILL.md +94 -381
  143. package/skills/cometchat-flutter-v6-production/SKILL.md +58 -615
  144. package/skills/cometchat-flutter-v6-push/SKILL.md +46 -455
  145. package/skills/cometchat-flutter-v6-testing/SKILL.md +68 -299
  146. package/skills/cometchat-flutter-v6-troubleshooting/SKILL.md +54 -878
  147. package/skills/cometchat-ios-calls/SKILL.md +105 -511
  148. package/skills/cometchat-ios-components/SKILL.md +44 -834
  149. package/skills/cometchat-ios-core/SKILL.md +181 -1068
  150. package/skills/cometchat-ios-core/references/anti-patterns.md +80 -0
  151. package/skills/cometchat-ios-core/references/docs-map.md +123 -0
  152. package/skills/cometchat-ios-core/references/install.md +23 -0
  153. package/skills/cometchat-ios-core/references/layout.md +186 -0
  154. package/skills/cometchat-ios-core/references/setup-credentials.md +197 -0
  155. package/skills/cometchat-ios-core/references/swiftui.md +91 -0
  156. package/skills/cometchat-ios-core/references/troubleshooting.md +100 -0
  157. package/skills/cometchat-ios-customization/SKILL.md +33 -968
  158. package/skills/cometchat-ios-features/SKILL.md +29 -738
  159. package/skills/cometchat-ios-migration/SKILL.md +39 -0
  160. package/skills/cometchat-ios-placement/SKILL.md +51 -729
  161. package/skills/cometchat-ios-push/SKILL.md +24 -602
  162. package/skills/cometchat-ios-v5-sdk/SKILL.md +161 -0
  163. package/skills/cometchat-ios-v5-sdk/references/docs-map.md +326 -0
  164. package/skills/cometchat-js-v5-sdk/SKILL.md +95 -0
  165. package/skills/cometchat-js-v5-sdk/references/docs-map.md +114 -0
  166. package/skills/cometchat-onboarding/SKILL.md +89 -0
  167. package/skills/cometchat-onboarding/references/archetypes.md +51 -0
  168. package/skills/cometchat-onboarding/references/calling-first.md +77 -0
  169. package/skills/cometchat-onboarding/references/not-in-this-pack.md +8 -0
  170. package/skills/cometchat-onboarding/references/plan-artifact.md +133 -0
  171. package/skills/cometchat-onboarding/references/platforms.md +90 -0
  172. package/skills/cometchat-react-native-bare-patterns/SKILL.md +120 -0
  173. package/skills/cometchat-react-native-calls/SKILL.md +200 -0
  174. package/skills/cometchat-react-native-components/SKILL.md +142 -0
  175. package/skills/cometchat-react-native-core/SKILL.md +313 -0
  176. package/skills/cometchat-react-native-core/references/anti-patterns.md +79 -0
  177. package/skills/cometchat-react-native-core/references/component-props.md +105 -0
  178. package/skills/cometchat-react-native-core/references/dependencies.md +62 -0
  179. package/skills/cometchat-react-native-core/references/docs-map.md +126 -0
  180. package/skills/cometchat-react-native-core/references/layout.md +61 -0
  181. package/skills/cometchat-react-native-core/references/lifecycle.md +64 -0
  182. package/skills/cometchat-react-native-core/references/setup-credentials.md +39 -0
  183. package/skills/cometchat-react-native-customization/SKILL.md +198 -0
  184. package/skills/cometchat-react-native-expo-patterns/SKILL.md +116 -0
  185. package/skills/cometchat-react-native-features/SKILL.md +122 -0
  186. package/skills/cometchat-react-native-migration/SKILL.md +103 -0
  187. package/skills/cometchat-react-native-placement/SKILL.md +158 -0
  188. package/skills/cometchat-react-native-production/SKILL.md +78 -0
  189. package/skills/cometchat-react-native-push/SKILL.md +88 -0
  190. package/skills/cometchat-react-native-sdk/SKILL.md +126 -0
  191. package/skills/cometchat-react-native-sdk/references/method-map.md +239 -0
  192. package/skills/cometchat-react-native-sdk/references/page-map.md +96 -0
  193. package/skills/cometchat-react-native-testing/SKILL.md +94 -0
  194. package/skills/cometchat-react-native-troubleshooting/SKILL.md +116 -0
  195. package/skills/cometchat-react-native-v5-sdk/SKILL.md +150 -0
  196. package/skills/cometchat-react-native-v5-sdk/references/docs-map.md +127 -0
  197. package/skills/cometchat-react-native-v5-sdk/references/ringing-voip.md +369 -0
  198. package/skills/cometchat-react-v7-calls/SKILL.md +75 -0
  199. package/skills/cometchat-react-v7-components/SKILL.md +72 -0
  200. package/skills/cometchat-react-v7-core/SKILL.md +101 -0
  201. package/skills/cometchat-react-v7-core/references/anti-patterns.md +19 -0
  202. package/skills/cometchat-react-v7-core/references/component-props.md +82 -0
  203. package/skills/cometchat-react-v7-core/references/dependencies.md +23 -0
  204. package/skills/cometchat-react-v7-core/references/docs-map.md +117 -0
  205. package/skills/cometchat-react-v7-core/references/i18n-rtl-a11y.md +22 -0
  206. package/skills/cometchat-react-v7-core/references/layout.md +158 -0
  207. package/skills/cometchat-react-v7-core/references/lifecycle.md +74 -0
  208. package/skills/cometchat-react-v7-core/references/setup-credentials.md +58 -0
  209. package/skills/cometchat-react-v7-core/references/ssr.md +11 -0
  210. package/skills/cometchat-react-v7-core/references/theming.md +52 -0
  211. package/skills/cometchat-react-v7-core/references/troubleshooting.md +28 -0
  212. package/skills/cometchat-react-v7-customization/SKILL.md +84 -0
  213. package/skills/cometchat-react-v7-features/SKILL.md +92 -0
  214. package/skills/cometchat-react-v7-migration/SKILL.md +39 -0
  215. package/skills/cometchat-react-v7-migration/references/migration-guide.md +119 -0
  216. package/skills/cometchat-react-v7-patterns/SKILL.md +43 -0
  217. package/skills/cometchat-react-v7-placement/SKILL.md +106 -0
  218. package/skills/cometchat-react-v7-placement/references/recipes.md +354 -0
  219. package/skills/cometchat-react-v7-push/SKILL.md +53 -0
  220. package/test-suite/README.md +70 -0
  221. package/test-suite/catalogs/android-calls-v5.json +830 -0
  222. package/test-suite/catalogs/android-calls-v5.symbols.txt +499 -0
  223. package/test-suite/catalogs/android-v6.json +1646 -0
  224. package/test-suite/catalogs/android-v6.symbols.txt +298 -0
  225. package/test-suite/catalogs/angular-v5.json +7587 -0
  226. package/test-suite/catalogs/flutter-calls-v5.json +196 -0
  227. package/test-suite/catalogs/flutter-calls-v5.symbols.txt +59 -0
  228. package/test-suite/catalogs/flutter-v6.json +651 -0
  229. package/test-suite/catalogs/ios-calls-v5.json +158 -0
  230. package/test-suite/catalogs/ios-calls-v5.symbols.txt +70 -0
  231. package/test-suite/catalogs/ios-v5.json +1383 -0
  232. package/test-suite/catalogs/ios-v5.symbols.txt +699 -0
  233. package/test-suite/catalogs/rn-calls-v5.json +134 -0
  234. package/test-suite/catalogs/rn-sdk-v4.json +672 -0
  235. package/test-suite/catalogs/rn-v5.json +449 -0
  236. package/test-suite/catalogs/sdk-android-v5.json +514 -0
  237. package/test-suite/catalogs/sdk-android-v5.symbols.txt +254 -0
  238. package/test-suite/catalogs/sdk-jsv4.json +800 -0
  239. package/test-suite/catalogs/web-calls-v5.json +195 -0
  240. package/test-suite/catalogs/web-v7.json +1243 -0
  241. package/test-suite/scripts/build-registry.mjs +113 -0
  242. package/test-suite/scripts/catalog-refresh-dart.mjs +151 -0
  243. package/test-suite/scripts/catalog-refresh.mjs +100 -0
  244. package/test-suite/scripts/lint-skills.mjs +909 -0
  245. package/test-suite/scripts/measure-tokens.mjs +169 -0
  246. package/test-suite/scripts/typecheck-fences-dart.mjs +437 -0
  247. package/test-suite/scripts/typecheck-fences-kotlin.mjs +269 -0
  248. package/test-suite/scripts/typecheck-fences.mjs +206 -0
  249. package/test-suite/scripts/verify-catalog.mjs +242 -0
  250. package/test-suite/scripts/verify-contract-fences.mjs +94 -0
  251. package/test-suite/scripts/verify-detection.mjs +178 -0
  252. package/test-suite/scripts/verify-docs-base.mjs +91 -0
  253. package/test-suite/scripts/verify-family-agnostic.mjs +130 -0
  254. package/test-suite/scripts/verify-golden-path.mjs +138 -0
  255. package/test-suite/scripts/verify-oracle-components.mjs +133 -0
  256. package/test-suite/scripts/verify-template-bindings.mjs +148 -0
  257. package/test-suite/typecheck/angular-v5/package.json +21 -0
  258. package/test-suite/typecheck/angular-v5/tsconfig.json +21 -0
  259. package/test-suite/typecheck/flutter-v6/analysis_options.yaml +25 -0
  260. package/test-suite/typecheck/flutter-v6/pubspec.yaml +21 -0
  261. package/test-suite/typecheck/web-v7/package.json +18 -0
  262. package/test-suite/typecheck/web-v7/tsconfig.json +19 -0
  263. package/bin/install.js +0 -1003
  264. package/skills/.claude-plugin/marketplace.json +0 -86
  265. package/skills/cometchat/references/asking-questions.md +0 -48
  266. package/skills/cometchat-a11y/SKILL.md +0 -477
  267. package/skills/cometchat-android-v5/SKILL.md +0 -121
  268. package/skills/cometchat-android-v5-calls/SKILL.md +0 -427
  269. package/skills/cometchat-android-v5-calls/references/README.md +0 -53
  270. package/skills/cometchat-android-v5-calls/references/add-calls-to-existing-chat.md +0 -197
  271. package/skills/cometchat-android-v5-calls/references/audio-controls.md +0 -91
  272. package/skills/cometchat-android-v5-calls/references/background-handling.md +0 -168
  273. package/skills/cometchat-android-v5-calls/references/call-layouts.md +0 -131
  274. package/skills/cometchat-android-v5-calls/references/call-logs.md +0 -113
  275. package/skills/cometchat-android-v5-calls/references/call-session.md +0 -274
  276. package/skills/cometchat-android-v5-calls/references/custom-ui.md +0 -150
  277. package/skills/cometchat-android-v5-calls/references/event-listeners.md +0 -123
  278. package/skills/cometchat-android-v5-calls/references/group-calls.md +0 -205
  279. package/skills/cometchat-android-v5-calls/references/idle-timeout.md +0 -117
  280. package/skills/cometchat-android-v5-calls/references/in-call-chat.md +0 -134
  281. package/skills/cometchat-android-v5-calls/references/join-session.md +0 -120
  282. package/skills/cometchat-android-v5-calls/references/migration-v4-to-v5.md +0 -222
  283. package/skills/cometchat-android-v5-calls/references/participant-management.md +0 -110
  284. package/skills/cometchat-android-v5-calls/references/picture-in-picture.md +0 -106
  285. package/skills/cometchat-android-v5-calls/references/raise-hand.md +0 -248
  286. package/skills/cometchat-android-v5-calls/references/recording.md +0 -101
  287. package/skills/cometchat-android-v5-calls/references/ringing-integration.md +0 -152
  288. package/skills/cometchat-android-v5-calls/references/screen-sharing.md +0 -78
  289. package/skills/cometchat-android-v5-calls/references/server-fcm-voip.md +0 -215
  290. package/skills/cometchat-android-v5-calls/references/session-settings.md +0 -121
  291. package/skills/cometchat-android-v5-calls/references/setup.md +0 -137
  292. package/skills/cometchat-android-v5-calls/references/share-invite.md +0 -156
  293. package/skills/cometchat-android-v5-calls/references/video-controls.md +0 -87
  294. package/skills/cometchat-android-v5-calls/references/voip-calling.md +0 -526
  295. package/skills/cometchat-android-v5-components/SKILL.md +0 -431
  296. package/skills/cometchat-android-v5-core/SKILL.md +0 -486
  297. package/skills/cometchat-android-v5-customization/SKILL.md +0 -469
  298. package/skills/cometchat-android-v5-extensions/SKILL.md +0 -127
  299. package/skills/cometchat-android-v5-features/SKILL.md +0 -131
  300. package/skills/cometchat-android-v5-placement/SKILL.md +0 -277
  301. package/skills/cometchat-android-v5-production/SKILL.md +0 -95
  302. package/skills/cometchat-android-v5-push/SKILL.md +0 -619
  303. package/skills/cometchat-android-v5-testing/SKILL.md +0 -188
  304. package/skills/cometchat-android-v5-theming/SKILL.md +0 -167
  305. package/skills/cometchat-android-v5-troubleshooting/SKILL.md +0 -74
  306. package/skills/cometchat-android-v6/SKILL.md +0 -108
  307. package/skills/cometchat-android-v6-calls/references/add-calls-to-existing-chat.md +0 -97
  308. package/skills/cometchat-android-v6-calls/references/advanced-features.md +0 -87
  309. package/skills/cometchat-android-v6-calls/references/call-layouts.md +0 -100
  310. package/skills/cometchat-android-v6-calls/references/call-session.md +0 -163
  311. package/skills/cometchat-android-v6-calls/references/device-management.md +0 -172
  312. package/skills/cometchat-android-v6-calls/references/group-calls.md +0 -191
  313. package/skills/cometchat-android-v6-calls/references/idle-timeout.md +0 -110
  314. package/skills/cometchat-android-v6-calls/references/in-call-chat.md +0 -141
  315. package/skills/cometchat-android-v6-calls/references/raise-hand.md +0 -188
  316. package/skills/cometchat-android-v6-calls/references/ringing-integration.md +0 -176
  317. package/skills/cometchat-android-v6-calls/references/server-fcm-voip.md +0 -127
  318. package/skills/cometchat-android-v6-calls/references/share-invite.md +0 -105
  319. package/skills/cometchat-android-v6-compose-theming/SKILL.md +0 -250
  320. package/skills/cometchat-android-v6-kotlin-theming/SKILL.md +0 -233
  321. package/skills/cometchat-angular-calls/SKILL.md +0 -378
  322. package/skills/cometchat-angular-calls/references/add-calls-to-existing-chat.md +0 -96
  323. package/skills/cometchat-angular-calls/references/call-layouts.md +0 -123
  324. package/skills/cometchat-angular-calls/references/call-session.md +0 -167
  325. package/skills/cometchat-angular-calls/references/custom-ui.md +0 -239
  326. package/skills/cometchat-angular-calls/references/device-management.md +0 -154
  327. package/skills/cometchat-angular-calls/references/group-calls.md +0 -433
  328. package/skills/cometchat-angular-calls/references/idle-timeout.md +0 -161
  329. package/skills/cometchat-angular-calls/references/in-call-chat.md +0 -148
  330. package/skills/cometchat-angular-calls/references/lazy-loading-pitfalls.md +0 -205
  331. package/skills/cometchat-angular-calls/references/migration-v4-to-v5.md +0 -53
  332. package/skills/cometchat-angular-calls/references/ngzone-and-async-callbacks.md +0 -184
  333. package/skills/cometchat-angular-calls/references/picture-in-picture.md +0 -285
  334. package/skills/cometchat-angular-calls/references/raise-hand.md +0 -172
  335. package/skills/cometchat-angular-calls/references/recording-screen-share.md +0 -260
  336. package/skills/cometchat-angular-calls/references/ringing-integration.md +0 -133
  337. package/skills/cometchat-angular-calls/references/server-web-push-vapid.md +0 -100
  338. package/skills/cometchat-angular-calls/references/share-invite.md +0 -122
  339. package/skills/cometchat-angular-calls/references/virtual-background.md +0 -29
  340. package/skills/cometchat-angular-components/SKILL.md +0 -235
  341. package/skills/cometchat-angular-core/SKILL.md +0 -386
  342. package/skills/cometchat-angular-customization/SKILL.md +0 -616
  343. package/skills/cometchat-angular-features/SKILL.md +0 -329
  344. package/skills/cometchat-angular-patterns/SKILL.md +0 -256
  345. package/skills/cometchat-angular-placement/SKILL.md +0 -314
  346. package/skills/cometchat-angular-production/SKILL.md +0 -564
  347. package/skills/cometchat-angular-push/SKILL.md +0 -389
  348. package/skills/cometchat-angular-testing/SKILL.md +0 -605
  349. package/skills/cometchat-angular-theming/SKILL.md +0 -290
  350. package/skills/cometchat-angular-troubleshooting/SKILL.md +0 -364
  351. package/skills/cometchat-astro-patterns/SKILL.md +0 -708
  352. package/skills/cometchat-calls/SKILL.md +0 -364
  353. package/skills/cometchat-calls/references/use-case-broadcast.md +0 -199
  354. package/skills/cometchat-calls/references/use-case-marketplace.md +0 -157
  355. package/skills/cometchat-calls/references/use-case-support.md +0 -189
  356. package/skills/cometchat-calls/references/use-case-team.md +0 -180
  357. package/skills/cometchat-calls/references/use-case-telehealth.md +0 -153
  358. package/skills/cometchat-components/SKILL.md +0 -1142
  359. package/skills/cometchat-core/SKILL.md +0 -1048
  360. package/skills/cometchat-customization/SKILL.md +0 -580
  361. package/skills/cometchat-customization/references/component-catalog.md +0 -236
  362. package/skills/cometchat-features/SKILL.md +0 -861
  363. package/skills/cometchat-flutter-v5/SKILL.md +0 -173
  364. package/skills/cometchat-flutter-v5-calls/SKILL.md +0 -453
  365. package/skills/cometchat-flutter-v5-calls/references/add-calls-to-existing-chat.md +0 -193
  366. package/skills/cometchat-flutter-v5-calls/references/call-layouts.md +0 -103
  367. package/skills/cometchat-flutter-v5-calls/references/call-session.md +0 -285
  368. package/skills/cometchat-flutter-v5-calls/references/device-management.md +0 -124
  369. package/skills/cometchat-flutter-v5-calls/references/group-calls.md +0 -181
  370. package/skills/cometchat-flutter-v5-calls/references/idle-timeout.md +0 -99
  371. package/skills/cometchat-flutter-v5-calls/references/in-call-chat.md +0 -135
  372. package/skills/cometchat-flutter-v5-calls/references/migration-v4-to-v5.md +0 -210
  373. package/skills/cometchat-flutter-v5-calls/references/raise-hand.md +0 -255
  374. package/skills/cometchat-flutter-v5-calls/references/ringing-integration.md +0 -196
  375. package/skills/cometchat-flutter-v5-calls/references/server-push-bridge.md +0 -101
  376. package/skills/cometchat-flutter-v5-calls/references/share-invite.md +0 -148
  377. package/skills/cometchat-flutter-v5-conversations/SKILL.md +0 -118
  378. package/skills/cometchat-flutter-v5-core/SKILL.md +0 -239
  379. package/skills/cometchat-flutter-v5-customization/SKILL.md +0 -358
  380. package/skills/cometchat-flutter-v5-events/SKILL.md +0 -156
  381. package/skills/cometchat-flutter-v5-messages/SKILL.md +0 -259
  382. package/skills/cometchat-flutter-v5-production/SKILL.md +0 -216
  383. package/skills/cometchat-flutter-v5-push/SKILL.md +0 -285
  384. package/skills/cometchat-flutter-v5-testing/SKILL.md +0 -401
  385. package/skills/cometchat-flutter-v5-theming/SKILL.md +0 -161
  386. package/skills/cometchat-flutter-v5-troubleshooting/SKILL.md +0 -130
  387. package/skills/cometchat-flutter-v5-users-groups/SKILL.md +0 -152
  388. package/skills/cometchat-flutter-v6/SKILL.md +0 -446
  389. package/skills/cometchat-flutter-v6-calls/references/add-calls-to-existing-chat.md +0 -136
  390. package/skills/cometchat-flutter-v6-calls/references/advanced-features.md +0 -89
  391. package/skills/cometchat-flutter-v6-calls/references/call-layouts.md +0 -105
  392. package/skills/cometchat-flutter-v6-calls/references/call-session.md +0 -229
  393. package/skills/cometchat-flutter-v6-calls/references/device-management.md +0 -105
  394. package/skills/cometchat-flutter-v6-calls/references/group-calls.md +0 -190
  395. package/skills/cometchat-flutter-v6-calls/references/idle-timeout.md +0 -88
  396. package/skills/cometchat-flutter-v6-calls/references/in-call-chat.md +0 -125
  397. package/skills/cometchat-flutter-v6-calls/references/raise-hand.md +0 -275
  398. package/skills/cometchat-flutter-v6-calls/references/ringing-integration.md +0 -171
  399. package/skills/cometchat-flutter-v6-calls/references/server-push-bridge.md +0 -93
  400. package/skills/cometchat-flutter-v6-calls/references/share-invite.md +0 -102
  401. package/skills/cometchat-flutter-v6-conversations/SKILL.md +0 -238
  402. package/skills/cometchat-flutter-v6-messages/SKILL.md +0 -384
  403. package/skills/cometchat-flutter-v6-theming/SKILL.md +0 -293
  404. package/skills/cometchat-flutter-v6-users-groups/SKILL.md +0 -224
  405. package/skills/cometchat-i18n/SKILL.md +0 -419
  406. package/skills/cometchat-ios/SKILL.md +0 -325
  407. package/skills/cometchat-ios-calls/references/add-calls-to-existing-chat.md +0 -174
  408. package/skills/cometchat-ios-calls/references/audio-modes-and-controls.md +0 -45
  409. package/skills/cometchat-ios-calls/references/avaudiosession-routing.md +0 -188
  410. package/skills/cometchat-ios-calls/references/call-layouts.md +0 -76
  411. package/skills/cometchat-ios-calls/references/call-session.md +0 -218
  412. package/skills/cometchat-ios-calls/references/callkit-and-pushkit.md +0 -357
  413. package/skills/cometchat-ios-calls/references/custom-ui.md +0 -322
  414. package/skills/cometchat-ios-calls/references/device-management.md +0 -171
  415. package/skills/cometchat-ios-calls/references/group-calls.md +0 -359
  416. package/skills/cometchat-ios-calls/references/idle-timeout.md +0 -184
  417. package/skills/cometchat-ios-calls/references/in-call-chat.md +0 -179
  418. package/skills/cometchat-ios-calls/references/migration-v4-to-v5.md +0 -196
  419. package/skills/cometchat-ios-calls/references/picture-in-picture.md +0 -246
  420. package/skills/cometchat-ios-calls/references/raise-hand.md +0 -26
  421. package/skills/cometchat-ios-calls/references/recording-screen-share.md +0 -252
  422. package/skills/cometchat-ios-calls/references/ringing-integration.md +0 -143
  423. package/skills/cometchat-ios-calls/references/server-apns-pushkit.md +0 -267
  424. package/skills/cometchat-ios-calls/references/share-invite.md +0 -148
  425. package/skills/cometchat-ios-calls/references/swiftui-uikit-hosting.md +0 -246
  426. package/skills/cometchat-ios-calls/references/voip-cert-setup.md +0 -166
  427. package/skills/cometchat-ios-production/SKILL.md +0 -738
  428. package/skills/cometchat-ios-testing/SKILL.md +0 -376
  429. package/skills/cometchat-ios-theming/SKILL.md +0 -667
  430. package/skills/cometchat-ios-troubleshooting/SKILL.md +0 -1003
  431. package/skills/cometchat-native-bare-patterns/SKILL.md +0 -550
  432. package/skills/cometchat-native-calls/SKILL.md +0 -669
  433. package/skills/cometchat-native-calls/references/add-calls-to-existing-chat.md +0 -203
  434. package/skills/cometchat-native-calls/references/call-layouts.md +0 -125
  435. package/skills/cometchat-native-calls/references/call-session.md +0 -182
  436. package/skills/cometchat-native-calls/references/custom-ui.md +0 -254
  437. package/skills/cometchat-native-calls/references/device-management.md +0 -158
  438. package/skills/cometchat-native-calls/references/expo-vs-bare.md +0 -179
  439. package/skills/cometchat-native-calls/references/group-calls.md +0 -296
  440. package/skills/cometchat-native-calls/references/idle-timeout.md +0 -128
  441. package/skills/cometchat-native-calls/references/in-call-chat.md +0 -145
  442. package/skills/cometchat-native-calls/references/migration-v4-to-v5.md +0 -72
  443. package/skills/cometchat-native-calls/references/picture-in-picture.md +0 -276
  444. package/skills/cometchat-native-calls/references/raise-hand.md +0 -205
  445. package/skills/cometchat-native-calls/references/recording-screen-share.md +0 -169
  446. package/skills/cometchat-native-calls/references/ringing-integration.md +0 -118
  447. package/skills/cometchat-native-calls/references/server-push-bridge.md +0 -135
  448. package/skills/cometchat-native-calls/references/server-push-payloads.md +0 -193
  449. package/skills/cometchat-native-calls/references/share-invite.md +0 -146
  450. package/skills/cometchat-native-calls/references/voip-push-end-to-end.md +0 -319
  451. package/skills/cometchat-native-components/SKILL.md +0 -628
  452. package/skills/cometchat-native-core/SKILL.md +0 -679
  453. package/skills/cometchat-native-customization/SKILL.md +0 -716
  454. package/skills/cometchat-native-expo-patterns/SKILL.md +0 -552
  455. package/skills/cometchat-native-features/SKILL.md +0 -638
  456. package/skills/cometchat-native-placement/SKILL.md +0 -509
  457. package/skills/cometchat-native-production/SKILL.md +0 -700
  458. package/skills/cometchat-native-push/SKILL.md +0 -594
  459. package/skills/cometchat-native-testing/SKILL.md +0 -582
  460. package/skills/cometchat-native-theming/SKILL.md +0 -681
  461. package/skills/cometchat-native-troubleshooting/SKILL.md +0 -501
  462. package/skills/cometchat-nextjs-patterns/SKILL.md +0 -899
  463. package/skills/cometchat-placement/SKILL.md +0 -1360
  464. package/skills/cometchat-production/SKILL.md +0 -1027
  465. package/skills/cometchat-react-calls/SKILL.md +0 -749
  466. package/skills/cometchat-react-calls/references/add-calls-to-existing-chat.md +0 -146
  467. package/skills/cometchat-react-calls/references/call-layouts.md +0 -160
  468. package/skills/cometchat-react-calls/references/call-session.md +0 -235
  469. package/skills/cometchat-react-calls/references/custom-ui.md +0 -247
  470. package/skills/cometchat-react-calls/references/device-management.md +0 -210
  471. package/skills/cometchat-react-calls/references/group-calls.md +0 -257
  472. package/skills/cometchat-react-calls/references/idle-timeout.md +0 -188
  473. package/skills/cometchat-react-calls/references/in-call-chat.md +0 -212
  474. package/skills/cometchat-react-calls/references/migration-v4-to-v5.md +0 -170
  475. package/skills/cometchat-react-calls/references/picture-in-picture.md +0 -245
  476. package/skills/cometchat-react-calls/references/raise-hand.md +0 -238
  477. package/skills/cometchat-react-calls/references/recording-screen-share.md +0 -144
  478. package/skills/cometchat-react-calls/references/ringing-integration.md +0 -255
  479. package/skills/cometchat-react-calls/references/server-web-push-vapid.md +0 -241
  480. package/skills/cometchat-react-calls/references/share-invite.md +0 -175
  481. package/skills/cometchat-react-calls/references/testing-calls-on-web.md +0 -216
  482. package/skills/cometchat-react-calls/references/virtual-background.md +0 -32
  483. package/skills/cometchat-react-calls/references/voip-and-web-push.md +0 -165
  484. package/skills/cometchat-react-patterns/SKILL.md +0 -628
  485. package/skills/cometchat-react-push/SKILL.md +0 -634
  486. package/skills/cometchat-react-router-patterns/SKILL.md +0 -758
  487. package/skills/cometchat-react-testing/SKILL.md +0 -413
  488. package/skills/cometchat-theming/SKILL.md +0 -498
  489. 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.