@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,96 +0,0 @@
1
- # Adding calls to an existing chat integration (Angular)
2
-
3
- Same SDK as web; Angular-specific deltas: NgZone wrapping, NgModule registration, root-level CometChatIncomingCall mounting.
4
-
5
- **Read first:** `cometchat-react-calls/references/add-calls-to-existing-chat.md` — canonical web steps.
6
-
7
- ---
8
-
9
- ## Step 1 — Install + init
10
-
11
- ```bash
12
- npm install @cometchat/calls-sdk-javascript@5
13
- ```
14
-
15
- Update your existing init (typically in an `AppInitService`):
16
-
17
- ```ts
18
- @Injectable({ providedIn: "root" })
19
- export class AppInitService {
20
- async init(): Promise<void> {
21
- const settings = new CometChat.AppSettingsBuilder().setRegion(env.REGION).build();
22
- await CometChat.init(env.APP_ID, settings);
23
- await CometChatCalls.init({ appId: env.APP_ID, region: env.REGION });
24
- }
25
- }
26
- ```
27
-
28
- ---
29
-
30
- ## Step 2 — Login
31
-
32
- In your auth service, after `CometChat.login`:
33
-
34
- ```ts
35
- const user = await CometChat.login(uid, env.AUTH_KEY);
36
- const authToken = user.getAuthToken();
37
- // CometChatCalls.login(uid, authKey?) takes a UID; to authenticate with a token use loginWithAuthToken:
38
- await CometChatCalls.loginWithAuthToken(authToken);
39
- ```
40
-
41
- ---
42
-
43
- ## Step 3 — Mount IncomingCall at app root
44
-
45
- ```html
46
- <!-- app.component.html -->
47
- <router-outlet></router-outlet>
48
- <cometchat-incoming-call></cometchat-incoming-call>
49
- ```
50
-
51
- ```ts
52
- // app.module.ts (or standalone-component imports)
53
- import { CometChatIncomingCall } from "@cometchat/chat-uikit-angular";
54
-
55
- @NgModule({
56
- declarations: [AppComponent],
57
- imports: [CometChatIncomingCall, /* ... */],
58
- })
59
- export class AppModule {}
60
- ```
61
-
62
- ---
63
-
64
- ## Step 4 — NgZone wrap on calls events
65
-
66
- If you subscribe to `CometChatCalls.addEventListener` outside the kit's components, wrap with `NgZone.run`:
67
-
68
- ```ts
69
- @Injectable({ providedIn: "root" })
70
- export class CallEventsService {
71
- constructor(private zone: NgZone) {
72
- CometChatCalls.addEventListener("onSessionLeft", () => {
73
- this.zone.run(() => this.onSessionLeft$.next());
74
- });
75
- }
76
- }
77
- ```
78
-
79
- ---
80
-
81
- ## Verification checklist
82
-
83
- - [ ] `@cometchat/calls-sdk-javascript@^5` in package.json
84
- - [ ] Calls SDK init runs after chat SDK init in `AppInitService`
85
- - [ ] `CometChatCalls.loginWithAuthToken(authToken)` after `CometChat.login` (NOT `CometChatCalls.login`, which expects a UID)
86
- - [ ] `<cometchat-incoming-call>` rendered at app root (sibling of `router-outlet`)
87
- - [ ] All custom `addEventListener` callbacks wrapped in `NgZone.run`
88
- - [ ] Run `cometchat verify --calls` — should pass
89
-
90
- ---
91
-
92
- ## Pointers
93
-
94
- - `cometchat-react-calls/references/add-calls-to-existing-chat.md` — canonical
95
- - `cometchat-angular-calls/SKILL.md`
96
- - `references/ngzone-and-async-callbacks.md`
@@ -1,123 +0,0 @@
1
- # Call layouts on Angular
2
-
3
- Same SDK API as web. Angular wraps layout state in a service so multiple components (toolbar, sidebar, header) can stay in sync.
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/javascript/call-layouts
6
- **Read first:** `cometchat-react-calls/references/call-layouts.md` — layout matrix + when to lock.
7
-
8
- ---
9
-
10
- ## Layout service
11
-
12
- ```ts
13
- import { Injectable, NgZone, OnDestroy } from "@angular/core";
14
- import { BehaviorSubject } from "rxjs";
15
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
16
-
17
- export type CallLayout = "TILE" | "SIDEBAR" | "SPOTLIGHT";
18
-
19
- @Injectable({ providedIn: "root" })
20
- export class CallLayoutService implements OnDestroy {
21
- readonly layout$ = new BehaviorSubject<CallLayout>("TILE");
22
-
23
- // addEventListener returns an unsubscribe fn — there is NO CometChatCalls.removeEventListener.
24
- private off: () => void;
25
-
26
- constructor(private zone: NgZone) {
27
- this.off = CometChatCalls.addEventListener("onCallLayoutChanged", (next: string) => {
28
- this.zone.run(() => this.layout$.next(next as CallLayout));
29
- });
30
- }
31
-
32
- set(layout: CallLayout): void {
33
- CometChatCalls.setLayout(layout); // static runtime layout switch — valid
34
- this.layout$.next(layout);
35
- }
36
-
37
- ngOnDestroy(): void {
38
- this.off();
39
- }
40
- }
41
- ```
42
-
43
- ---
44
-
45
- ## Switcher component (mat-button-toggle-group)
46
-
47
- ```ts
48
- @Component({
49
- selector: "app-layout-switcher",
50
- template: `
51
- <mat-button-toggle-group
52
- [value]="layout$ | async"
53
- (change)="onChange($event.value)"
54
- aria-label="Call layout"
55
- >
56
- <mat-button-toggle value="TILE" aria-label="Tile layout">Tile</mat-button-toggle>
57
- <mat-button-toggle value="SIDEBAR" aria-label="Sidebar layout">Sidebar</mat-button-toggle>
58
- <mat-button-toggle value="SPOTLIGHT" aria-label="Spotlight layout">Spotlight</mat-button-toggle>
59
- </mat-button-toggle-group>
60
- `,
61
- })
62
- export class LayoutSwitcherComponent {
63
- layout$ = this.svc.layout$;
64
- constructor(private svc: CallLayoutService) {}
65
- onChange(layout: CallLayout) {
66
- this.svc.set(layout);
67
- }
68
- }
69
- ```
70
-
71
- `mat-button-toggle-group` already wires up `role="radiogroup"` semantics — no extra ARIA needed.
72
-
73
- ---
74
-
75
- ## Pass initial via session settings
76
-
77
- `joinSession` takes a **`SessionSettings` object**, not a builder result. The initial layout and
78
- the change-layout button visibility are plain object fields (`layout`, `hideChangeLayoutButton`).
79
- The builder has NO `setLayout` (its layout setter is the deprecated `setMode`) and NO
80
- `setHideChangeLayoutButton`, and its output (`CallSettings`) is not accepted by `joinSession`.
81
-
82
- ```ts
83
- const sessionSettings = {
84
- sessionType: "VIDEO",
85
- layout: "SPOTLIGHT",
86
- hideChangeLayoutButton: true, // if you ship LayoutSwitcherComponent
87
- } as const;
88
-
89
- await CometChatCalls.joinSession(callToken, sessionSettings, container.nativeElement);
90
- ```
91
-
92
- To switch layout at runtime use the static `CometChatCalls.setLayout(layout)` (as the
93
- `CallLayoutService.set` above does).
94
-
95
- ---
96
-
97
- ## Anti-patterns
98
-
99
- Web sister rules apply, plus Angular-specific:
100
-
101
- 1. **No `NgZone.run` wrap on the SDK callback.** Layout changes via the kit's switcher don't update the toggle group in OnPush components.
102
- 2. **Service provided in a feature module instead of root.** Layout state resets when navigating away and back.
103
- 3. **`(click)` on each toggle setting layout individually.** `mat-button-toggle-group`'s `(change)` is the right hook — single source of truth.
104
-
105
- ---
106
-
107
- ## Verification checklist
108
-
109
- - [ ] `CallLayoutService` provided in root
110
- - [ ] `NgZone.run` wraps the SDK callback
111
- - [ ] `mat-button-toggle-group` `(change)` calls `svc.set` (which calls static `CometChatCalls.setLayout`)
112
- - [ ] Initial layout via the `SessionSettings` object `{ layout, hideChangeLayoutButton }` passed to `joinSession` (no `CallSettingsBuilder`)
113
- - [ ] Listener unsubscribe fn captured + called in `ngOnDestroy` (no `removeEventListener`)
114
- - [ ] Browser smoke: 3 tabs, each picks a different layout, no cross-talk
115
-
116
- ---
117
-
118
- ## Pointers
119
-
120
- - `cometchat-react-calls/references/call-layouts.md` — sister
121
- - `cometchat-angular-calls` SKILL.md
122
- - `references/ngzone-and-async-callbacks.md`
123
- - Canonical docs: https://www.cometchat.com/docs/calls/javascript/call-layouts
@@ -1,167 +0,0 @@
1
- # Call session — joinSession with no ringing (Angular)
2
-
3
- Same SDK API as web. This file mirrors the upstream Angular sample at `calls-sdk-javascript-5/sample-apps/cometchat-calls-sample-app-angular/src/app/pages/join-session/`. Customer-validated against the v5 SDK as the known-good shape.
4
-
5
- **Read first:** `cometchat-react-calls/references/call-session.md` — full architecture (sessionId strategies, server-side authorization, token generation), then come back here for Angular specialization.
6
-
7
- ---
8
-
9
- ## Hard rules (Angular-specific overrides on top of the React-side rules)
10
-
11
- 1. **Use a signal for `inMeeting` state, `@if` to render the container, `viewChild` to read it.** This is the upstream sample's exact shape and avoids stale-template traps under OnPush change detection.
12
- 2. **Container CSS:** `position: fixed; top: 0; left: 0; width: 100vw; height: 100vh`. Matches the sample. Flex-derived sizing inside nested route outlets has produced "iframe renders at 0×0 → no video" in customer integrations.
13
- 3. **Pass an empty `{}` settings object.** Explicit `{ sessionType: "VIDEO", layout: "TILE" }` is type-valid but the sample app uses `{}` — that's the empirically-validated combination.
14
- 4. **`onConnectionClosed`** is the cleanup event, not `onSessionLeft`. Fires on ANY termination (peer left, network died, in-iframe Leave button).
15
- 5. **NgZone.run around router navigation in the event listener.** SDK events fire outside Angular's zone; raw router calls won't trigger change detection.
16
- 6. **For standalone session-only integrations, the Chat SDK is OPTIONAL.** Use `CometChatCalls.init({appId, region, authKey})` + `CometChatCalls.login(uid)` alone. The upstream sample never imports `@cometchat/chat-sdk-javascript`. Keep dual-SDK only for additive (chat + calls) integrations.
17
-
18
- ---
19
-
20
- ## Component (signals + @if + viewChild)
21
-
22
- ```ts
23
- import {
24
- Component, OnInit, OnDestroy,
25
- signal, viewChild, ElementRef, inject, NgZone,
26
- } from '@angular/core';
27
- import { Router, ActivatedRoute } from '@angular/router';
28
- import { CometChatCalls } from '@cometchat/calls-sdk-javascript';
29
-
30
- @Component({
31
- selector: 'app-call-room',
32
- standalone: true,
33
- template: `
34
- @if (inMeeting()) {
35
- <div class="meeting-container" #meetingContainer></div>
36
- }
37
- `,
38
- styles: [`
39
- .meeting-container {
40
- position: fixed;
41
- top: 0;
42
- left: 0;
43
- width: 100vw;
44
- height: 100vh;
45
- }
46
- `],
47
- })
48
- export class CallRoomComponent implements OnInit, OnDestroy {
49
- private route = inject(ActivatedRoute);
50
- private router = inject(Router);
51
- private zone = inject(NgZone);
52
-
53
- sessionId = '';
54
- inMeeting = signal(false);
55
-
56
- // Signal-based viewChild — populated after the @if block renders.
57
- meetingContainer = viewChild<ElementRef<HTMLDivElement>>('meetingContainer');
58
-
59
- private cleanupEventListener?: () => void;
60
-
61
- ngOnInit(): void {
62
- this.sessionId = this.route.snapshot.paramMap.get('sessionId') ?? '';
63
-
64
- // Cleanup listener fires on ANY session termination (peer left,
65
- // network dropped, in-iframe Leave clicked). Reset state via NgZone
66
- // so OnPush change detection picks it up.
67
- this.cleanupEventListener = CometChatCalls.addEventListener(
68
- 'onConnectionClosed',
69
- () => this.zone.run(() => {
70
- this.inMeeting.set(false);
71
- this.router.navigate(['/']);
72
- }),
73
- );
74
-
75
- if (this.sessionId) {
76
- this.startMeeting();
77
- }
78
- }
79
-
80
- ngOnDestroy(): void {
81
- this.cleanupEventListener?.();
82
- try {
83
- CometChatCalls.leaveSession();
84
- } catch {
85
- // ignore — not joined or already left
86
- }
87
- }
88
-
89
- private startMeeting(): void {
90
- this.inMeeting.set(true);
91
-
92
- // setTimeout(0) gives Angular one tick to render the @if block
93
- // so meetingContainer() is populated before joinSession measures it.
94
- setTimeout(() => {
95
- CometChatCalls.generateToken(this.sessionId).then(({ token }) => {
96
- const container = this.meetingContainer();
97
- if (container) {
98
- // Empty {} settings = SDK defaults (matches sample app).
99
- CometChatCalls.joinSession(token, {}, container.nativeElement);
100
- }
101
- });
102
- }, 0);
103
- }
104
- }
105
- ```
106
-
107
- **Why this shape (not the obvious alternatives):**
108
-
109
- - **`@if (inMeeting())` + `viewChild`** instead of always-rendered container + `@ViewChild({ static: true })` — matches the upstream sample. The signal-based pattern works under OnPush change detection without `markForCheck()` ceremonies.
110
- - **`position: fixed; 100vw × 100vh`** instead of `width: 100%; height: 100vh` — gives the SDK a deterministic viewport-anchored container. Flex-derived sizing inside route outlets has caused 0×0 iframe rendering.
111
- - **Empty `{}` settings** — the sample's validated combination. Explicit `{ sessionType: "VIDEO", layout: "TILE" }` is type-valid but has produced unexplained rendering issues.
112
- - **`onConnectionClosed`** — fires on ANY termination, not just user-initiated leave. More reliable for cleanup than `onSessionLeft`.
113
- - **`setTimeout(0)` after `inMeeting.set(true)`** — gives Angular one change-detection tick to render the `@if` block, so `meetingContainer()` is populated when `joinSession` measures it. The upstream sample uses the same trick (see `startInstantMeeting`).
114
- - **`NgZone.run` around router navigation in the listener** — SDK events fire outside Angular's zone; raw `router.navigate` won't trigger change detection. UI freezes despite URL changing.
115
-
116
- ---
117
-
118
- ## Route configuration
119
-
120
- ```ts
121
- const routes: Routes = [
122
- { path: 'meet/:sessionId', component: CallRoomComponent, data: { reuseRoute: false } },
123
- ];
124
- ```
125
-
126
- Read `sessionId` via `ActivatedRoute.snapshot.paramMap.get('sessionId')` in `ngOnInit`.
127
-
128
- ---
129
-
130
- ## Anti-patterns
131
-
132
- 1. **Always-rendered container with `@ViewChild({ static: true })`.** Works but doesn't match the sample app pattern and forces you to handle "not yet joined" rendering inside the SDK's iframe area. Use `@if` + `viewChild` signal instead.
133
- 2. **`@ViewChild({ static: false })` without compensating logic.** Container ref is undefined in `ngOnInit` — `joinSession` throws or no-ops.
134
- 3. **`width: 100%; height: 100vh` container.** Works in flat layouts; fails in nested route outlets or flex parents. Use `position: fixed` instead.
135
- 4. **Explicit `{ sessionType, layout, ... }` settings.** Type-valid but has caused unexplained black-tile-on-local-preview behaviour in customer integrations. Use `{}` and let the SDK pick defaults.
136
- 5. **`onSessionLeft` only.** Fires on graceful user leave but NOT on network drops or peer disconnects. Use `onConnectionClosed` for the cleanup path.
137
- 6. **Calling `startMeeting()` synchronously after `inMeeting.set(true)`.** The `@if` block hasn't rendered yet — `meetingContainer()` returns undefined. Wrap the `generateToken` + `joinSession` call in `setTimeout(0)` (or `afterNextRender` in Angular 16+).
138
- 7. **No `NgZone.run` around router navigation in event listeners.** SDK fires outside Angular's zone — change detection doesn't run, UI freezes.
139
- 8. **Component reused via `RouteReuseStrategy`.** Stale signal state → second navigation skips `joinSession`. Disable reuse for the call route.
140
- 9. **Initializing Chat SDK for a session-only integration.** Wastes time and adds two extra failure modes (Chat init, Chat login race). Drop `CometChat.init` / `CometChat.login` entirely for standalone session apps.
141
-
142
- ---
143
-
144
- ## Verification checklist
145
-
146
- - [ ] Container uses `position: fixed; width: 100vw; height: 100vh` (sample-app pattern)
147
- - [ ] Container rendered via `@if (inMeeting())`, read via `viewChild`
148
- - [ ] Settings passed as empty `{}`, not explicit `{ sessionType, layout, ... }`
149
- - [ ] `onConnectionClosed` listener handles session end (not just `onSessionLeft`)
150
- - [ ] `NgZone.run` wraps router navigation in the event handler
151
- - [ ] `setTimeout(0)` (or `afterNextRender`) gates `joinSession` until the `@if` block renders
152
- - [ ] `leaveSession` called in `ngOnDestroy`
153
- - [ ] Listener cleanup function called in `ngOnDestroy`
154
- - [ ] Route has `data: { reuseRoute: false }` to prevent stale-component reuse
155
- - [ ] **Standalone session-only:** no `CometChat.init` / `CometChat.login` — Calls SDK alone
156
- - [ ] **Additive (chat + calls):** dual-SDK contract preserved (Chat first, then Calls)
157
- - [ ] Browser smoke: 2 tabs, both navigate to `/meet/${sessionId}`, both join, media flows, either leaves → other sees onConnectionClosed
158
-
159
- ---
160
-
161
- ## Pointers
162
-
163
- - `cometchat-react-calls/references/call-session.md` — full architecture (sessionId strategies, server-side authorization)
164
- - `cometchat-angular-calls/SKILL.md` — Angular-specific dual-SDK init pattern
165
- - `references/ngzone-and-async-callbacks.md` — why NgZone.run matters for SDK events
166
- - Upstream Angular sample — `calls-sdk-javascript-5/sample-apps/cometchat-calls-sample-app-angular/src/app/pages/join-session/`
167
- - Canonical docs: https://www.cometchat.com/docs/calls/javascript/join-session
@@ -1,239 +0,0 @@
1
- # Custom call UI in Angular
2
-
3
- Same architecture as React + RN custom UI; Angular-specific because of NgZone, ContentChild, and ng-template.
4
-
5
- ---
6
-
7
- ## Two paths
8
-
9
- 1. **Style the kit's selectors** — pass Angular `[input]` props + content projection (`<ng-content select="...">`). Cheapest.
10
- 2. **Build your own component on the SDK** with your own `<video>` elements wrapped in Angular components. ⚠️ Two join APIs by settings type: **hybrid (hide-chrome)** → `SessionSettings` object + `joinSession`; **fully-custom (`enableDefaultLayout(false)`, own tiles)** → `CallSettingsBuilder` + the deprecated `startSession` (joinSession does NOT accept builder output). This reference shows the fully-custom path.
11
-
12
- This reference covers path 2.
13
-
14
- ---
15
-
16
- ## Component skeleton
17
-
18
- ```ts
19
- // ongoing-call.component.ts
20
- import { Component, ElementRef, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core";
21
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
22
-
23
- @Component({
24
- selector: "app-ongoing-call",
25
- template: `
26
- <div class="call-container">
27
- <video #remoteVideo autoplay playsinline class="remote-tile"></video>
28
- <video #localVideo autoplay playsinline muted class="local-tile"></video>
29
- <app-control-panel
30
- [muted]="muted"
31
- [cameraOff]="cameraOff"
32
- (toggleMute)="onToggleMute()"
33
- (toggleCamera)="onToggleCamera()"
34
- (switchCamera)="onSwitchCamera()"
35
- (end)="onEnd()"
36
- ></app-control-panel>
37
- </div>
38
- `,
39
- styles: [`
40
- .call-container { position: fixed; inset: 0; background: #000; }
41
- .remote-tile { width: 100%; height: 100%; object-fit: cover; }
42
- .local-tile { position: absolute; top: 60px; right: 20px; width: 120px; height: 160px; border-radius: 8px; }
43
- `],
44
- })
45
- export class OngoingCallComponent implements OnInit, OnDestroy {
46
- @ViewChild("localVideo") localVideoRef!: ElementRef<HTMLVideoElement>;
47
- @ViewChild("remoteVideo") remoteVideoRef!: ElementRef<HTMLVideoElement>;
48
-
49
- muted = false;
50
- cameraOff = false;
51
-
52
- private listener: unknown;
53
-
54
- constructor(private zone: NgZone) {}
55
-
56
- async ngOnInit() {
57
- // ⚠️ CometChatCalls.OngoingCallListener is @deprecated (use addEventListener).
58
- // It's only here because enableDefaultLayout(false) + startSession require it.
59
- this.listener = new CometChatCalls.OngoingCallListener({
60
- onUserListUpdated: (users: unknown) => {
61
- this.zone.run(() => { /* update roster */ });
62
- },
63
- onCallEnded: () => {
64
- this.zone.run(() => this.cleanup());
65
- },
66
- onCallEndButtonPressed: () => CometChatCalls.leaveSession(),
67
- onError: (err: unknown) => {
68
- this.zone.run(() => console.error("Call error:", err));
69
- },
70
- });
71
-
72
- // CallSettingsBuilder method names (verified vs calls-sdk-javascript@5):
73
- // - NO .setSessionID() on the builder — sessionId flows via generateToken()
74
- // - .setIsAudioOnlyCall(bool), not .setIsAudioOnly()
75
- // - .setCallListener(listener), not .setCallEventListener()
76
- const settings = new CometChatCalls.CallSettingsBuilder()
77
- .setIsAudioOnlyCall(false)
78
- .enableDefaultLayout(false)
79
- .setCallListener(this.listener)
80
- .build();
81
-
82
- // generateToken takes ONLY sessionId. Auth is internal after CometChatCalls.login().
83
- const tokenRes = await CometChatCalls.generateToken(this.sessionId);
84
- // This fully-custom path uses enableDefaultLayout(false), which builds a CallSettings —
85
- // consumed ONLY by the deprecated startSession. joinSession takes a SessionSettings
86
- // OBJECT and will NOT accept CallSettingsBuilder output. startSession is the one place
87
- // the deprecated call is still required (enableDefaultLayout is builder-only).
88
- CometChatCalls.startSession(tokenRes.token, settings, this.callContainerRef.nativeElement);
89
- }
90
-
91
- ngOnDestroy() {
92
- this.cleanup();
93
- }
94
-
95
- onToggleMute() {
96
- this.muted = !this.muted;
97
- // No-arg methods — muteAudio(bool) ignores the arg. Use the explicit pair.
98
- this.muted ? CometChatCalls.muteAudio() : CometChatCalls.unmuteAudio();
99
- }
100
-
101
- onToggleCamera() {
102
- this.cameraOff = !this.cameraOff;
103
- this.cameraOff ? CometChatCalls.pauseVideo() : CometChatCalls.resumeVideo();
104
- }
105
-
106
- onSwitchCamera() {
107
- CometChatCalls.switchCamera();
108
- }
109
-
110
- onEnd() {
111
- CometChatCalls.leaveSession();
112
- this.cleanup();
113
- }
114
-
115
- private cleanup() {
116
- CometChatCalls.leaveSession();
117
- if (this.localVideoRef?.nativeElement) this.localVideoRef.nativeElement.srcObject = null;
118
- if (this.remoteVideoRef?.nativeElement) this.remoteVideoRef.nativeElement.srcObject = null;
119
- }
120
-
121
- // Inputs
122
- sessionId!: string; // bind from route param or parent
123
- }
124
- ```
125
-
126
- NgZone.run wraps every SDK callback that mutates `this.*` (rule from `references/ngzone-and-async-callbacks.md`).
127
-
128
- ---
129
-
130
- ## Control panel as a child component
131
-
132
- ```ts
133
- // control-panel.component.ts
134
- import { Component, EventEmitter, Input, Output } from "@angular/core";
135
-
136
- @Component({
137
- selector: "app-control-panel",
138
- template: `
139
- <div class="row">
140
- <button (click)="toggleMute.emit()">{{ muted ? "Unmute" : "Mute" }}</button>
141
- <button (click)="toggleCamera.emit()">{{ cameraOff ? "Cam on" : "Cam off" }}</button>
142
- <button (click)="switchCamera.emit()">Flip</button>
143
- <button (click)="end.emit()" class="end">End</button>
144
- </div>
145
- `,
146
- styles: [`
147
- .row { position: absolute; bottom: 40px; left: 0; right: 0; display: flex; justify-content: space-around; }
148
- button { padding: 16px; border-radius: 32px; }
149
- .end { background: red; color: white; }
150
- `],
151
- })
152
- export class ControlPanelComponent {
153
- @Input() muted = false;
154
- @Input() cameraOff = false;
155
- @Output() toggleMute = new EventEmitter<void>();
156
- @Output() toggleCamera = new EventEmitter<void>();
157
- @Output() switchCamera = new EventEmitter<void>();
158
- @Output() end = new EventEmitter<void>();
159
- }
160
- ```
161
-
162
- ---
163
-
164
- ## Local preview before the call connects
165
-
166
- ```ts
167
- async ngOnInit() {
168
- // ... listener setup ...
169
-
170
- // Preview stream
171
- try {
172
- const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
173
- this.localStream = stream;
174
- if (this.localVideoRef.nativeElement) {
175
- this.localVideoRef.nativeElement.srcObject = stream;
176
- }
177
- } catch (err) {
178
- if ((err as Error).name === "NotAllowedError") {
179
- this.zone.run(() => this.errorMessage = "Camera/mic permission denied");
180
- }
181
- }
182
-
183
- // Then start session — SDK takes over
184
- // ...
185
- }
186
-
187
- ngOnDestroy() {
188
- this.localStream?.getTracks().forEach(t => t.stop()); // CRITICAL — release tracks
189
- this.cleanup();
190
- }
191
- ```
192
-
193
- ---
194
-
195
- ## Lazy loading custom call modules
196
-
197
- If your project lazy-loads the calls feature (a `CallsModule` lazy-loaded at `/calls`), there's a gotcha:
198
-
199
- The `cometchat-angular-core` skill says `APP_INITIALIZER` must run at bootstrap, before lazy-loaded routes. If your `CallInitService` is provided in `CallsModule` (lazy), `APP_INITIALIZER` can't depend on it — Angular hasn't loaded the module yet.
200
-
201
- **Fix:** provide `CallInitService` in `AppModule` (eager), even if call components live in a lazy module. The service runs at boot; the components load on demand. This is documented further in `references/lazy-loading-pitfalls.md`.
202
-
203
- ---
204
-
205
- ## Route guard for active calls
206
-
207
- If the user navigates away from the ongoing-call component mid-call, the call should end:
208
-
209
- ```ts
210
- // can-deactivate.guard.ts
211
- import { Injectable } from "@angular/core";
212
- import { CanDeactivate } from "@angular/router";
213
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
214
- import { OngoingCallComponent } from "./ongoing-call.component";
215
-
216
- @Injectable({ providedIn: "root" })
217
- export class CallDeactivateGuard implements CanDeactivate<OngoingCallComponent> {
218
- canDeactivate(component: OngoingCallComponent): boolean {
219
- if (!component.callActive) return true;
220
- const confirmed = window.confirm("End the active call?");
221
- if (confirmed) {
222
- CometChatCalls.leaveSession();
223
- }
224
- return confirmed;
225
- }
226
- }
227
- ```
228
-
229
- Register on the route:
230
-
231
- ```ts
232
- { path: "calls/ongoing/:id", component: OngoingCallComponent, canDeactivate: [CallDeactivateGuard] }
233
- ```
234
-
235
- ---
236
-
237
- ## When NOT to go custom in Angular
238
-
239
- Same as React/RN — kit defaults cover 80%+. NgZone wrangling is real overhead; prefer styling props on `<cometchat-ongoing-call>` first. Custom is for design-system requirements that the kit's CSS variable overrides can't reach.