@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,170 +0,0 @@
1
- # Calls SDK v4 → v5 migration (web)
2
-
3
- CometChat Calls SDK v5 is a **drop-in replacement** for v4 — bump the package, your existing code keeps working through deprecation shims. Migrate to v5 APIs to get granular event listeners, simpler init, and strongly-typed enums.
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/javascript/migration-guide-v5
6
-
7
- ---
8
-
9
- ## Step 1 — Bump the package
10
-
11
- ```bash
12
- npm install @cometchat/calls-sdk-javascript@5
13
- ```
14
-
15
- If you're using CometChat UI Kits, this is enough — the kit's calls integration uses the v4 deprecated layer. **You can ship to production at this step** and migrate v5 APIs incrementally.
16
-
17
- ---
18
-
19
- ## Step 2 — Migrate init (optional but cleaner)
20
-
21
- ```diff
22
- - const callAppSettings = new CometChatCalls.CallAppSettingsBuilder()
23
- - .setAppId("APP_ID")
24
- - .setRegion("REGION")
25
- - .build();
26
- - await CometChatCalls.init(callAppSettings);
27
-
28
- + await CometChatCalls.init({ appId: "APP_ID", region: "REGION" });
29
- ```
30
-
31
- ---
32
-
33
- ## Step 3 — Add `login()` after Chat SDK login
34
-
35
- v5 introduces a dedicated Calls SDK auth step. After the user logs into the Chat SDK, call:
36
-
37
- ```ts
38
- const authToken = (await CometChat.getLoggedInUser())!.getAuthToken();
39
- await CometChatCalls.loginWithAuthToken(authToken); // login() takes a uid; use loginWithAuthToken for a token
40
- ```
41
-
42
- After this, `generateToken()` and `joinSession()` no longer need an authToken parameter.
43
-
44
- ---
45
-
46
- ## Step 4 — Migrate session settings to plain object
47
-
48
- ```diff
49
- - const callSettings = new CometChatCalls.CallSettingsBuilder()
50
- - .setIsAudioOnlyCall(true)
51
- - .showRecordingButton(true)
52
- - .startWithAudioMuted(false)
53
- - .build();
54
-
55
- + const sessionSettings = {
56
- + sessionType: "VOICE", // was setIsAudioOnlyCall(true)
57
- + hideRecordingButton: false, // was showRecordingButton(true) — INVERTED
58
- + startAudioMuted: false,
59
- + layout: "TILE",
60
- + };
61
- ```
62
-
63
- **Watch out:** the boolean logic is **inverted** for many settings (v4 `show*` → v5 `hide*`). Search-and-replace doesn't work — review each manually.
64
-
65
- ---
66
-
67
- ## Step 5 — Migrate events to granular listeners
68
-
69
- ```diff
70
- - const callSettings = new CometChatCalls.CallSettingsBuilder()
71
- - .setCallListener(new CometChatCalls.OngoingCallListener({
72
- - onCallEnded: () => { /* ... */ },
73
- - onUserJoined: (user) => { /* ... */ },
74
- - onUserLeft: (user) => { /* ... */ },
75
- - onError: (error) => { /* ... */ },
76
- - }))
77
- - .build();
78
-
79
- + const unsub1 = CometChatCalls.addEventListener("onSessionLeft", () => { /* ... */ });
80
- + const unsub2 = CometChatCalls.addEventListener("onParticipantJoined", (p) => { /* ... */ });
81
- + const unsub3 = CometChatCalls.addEventListener("onParticipantLeft", (p) => { /* ... */ });
82
- + // Errors now come back via Promise rejection from joinSession() etc.
83
- +
84
- + // Cleanup
85
- + return () => { unsub1(); unsub2(); unsub3(); };
86
- ```
87
-
88
- **Event-name mapping (most common):**
89
-
90
- | v4 | v5 |
91
- |---|---|
92
- | `onCallEnded` | `onSessionLeft` |
93
- | `onCallEndButtonPressed` | `onLeaveSessionButtonClicked` |
94
- | `onUserJoined(user)` | `onParticipantJoined(participant)` |
95
- | `onUserLeft(user)` | `onParticipantLeft(participant)` |
96
- | `onUserListUpdated(list)` | `onParticipantListChanged(list)` |
97
- | `onUserMuted(info)` | `onParticipantAudioMuted(participant)` |
98
- | `onRecordingToggled(info)` | `onRecordingStarted` / `onRecordingStopped` |
99
-
100
- ---
101
-
102
- ## Step 6 — Migrate session control method names
103
-
104
- ```diff
105
- - CometChatCalls.endSession()
106
- + CometChatCalls.leaveSession()
107
-
108
- - CometChatCalls.muteAudio(true)
109
- + CometChatCalls.muteAudio()
110
- - CometChatCalls.muteAudio(false)
111
- + CometChatCalls.unmuteAudio()
112
-
113
- - CometChatCalls.pauseVideo(true)
114
- + CometChatCalls.pauseVideo()
115
- - CometChatCalls.pauseVideo(false)
116
- + CometChatCalls.resumeVideo()
117
-
118
- - CometChatCalls.setMode(mode)
119
- + CometChatCalls.setLayout(layout)
120
-
121
- - CometChatCalls.startScreenShare()
122
- + CometChatCalls.startScreenSharing()
123
- ```
124
-
125
- > PiP rename: v4's `enterPIPMode()` became the static `CometChatCalls.enablePictureInPictureLayout()` in v5 (paired with `disablePictureInPictureLayout()`). Note the `onPictureInPictureLayoutEnabled` / `...Disabled` **callbacks are on `MobileSDKEvents`, not `WebSDKEvents`** — they are NOT subscribable via `CometChatCalls.addEventListener` on the web SDK (verified in `@cometchat/calls-sdk-javascript` `index.d.ts`: `MobileSDKEvents` vs `WebSDKEvents`). On **web**, prefer browser-native picture-in-picture — see `references/picture-in-picture.md`.
126
-
127
- ---
128
-
129
- ## Step 7 — `startSession` → `joinSession`
130
-
131
- ```diff
132
- - CometChatCalls.generateToken(sessionId, authToken).then((token) => {
133
- - CometChatCalls.startSession(token, callSettings, container);
134
- - });
135
-
136
- + CometChatCalls.generateToken(sessionId).then(({ token }) => {
137
- + CometChatCalls.joinSession(token, sessionSettings, container);
138
- + });
139
- ```
140
-
141
- > `joinSession`'s first arg is the **callToken** (from `generateToken`), not a sessionId — there is no token-free join. `generateToken` resolves to `{ token }`, so destructure it.
142
-
143
- ---
144
-
145
- ## Removed methods (no v5 replacement)
146
-
147
- - `CometChatCalls.switchToVideoCall()` — start a fresh session with `sessionType: "VIDEO"` instead
148
- - `CometChatCalls.getCallDetails()` — track session state via events
149
-
150
- ---
151
-
152
- ## Verification checklist
153
-
154
- - [ ] `package.json` lists `@cometchat/calls-sdk-javascript@^5`
155
- - [ ] `await CometChatCalls.loginWithAuthToken(authToken)` called after `CometChat.login`
156
- - [ ] `OngoingCallListener` removed; granular `addEventListener` calls in place with cleanup
157
- - [ ] `startSession` replaced with `joinSession`
158
- - [ ] `endSession` replaced with `leaveSession`
159
- - [ ] Inverted booleans audited (show* → hide* with `!`)
160
- - [ ] No use of removed methods (`switchToVideoCall`, `getCallDetails`)
161
- - [ ] Existing call flows tested end-to-end (incoming, accept, mute, screen-share, end)
162
-
163
- ---
164
-
165
- ## Pointers
166
-
167
- - Canonical migration guide: https://www.cometchat.com/docs/calls/javascript/migration-guide-v5
168
- - `cometchat-react-calls/SKILL.md` — current architecture (v5)
169
- - `cometchat-react-calls/references/call-layouts.md` — layout enum migration
170
- - `cometchat-react-calls/references/recording-screen-share.md` — recording events migration
@@ -1,245 +0,0 @@
1
- # Picture-in-Picture on web
2
-
3
- Web has two PiP APIs, used for different things:
4
-
5
- 1. **Video PiP** (`HTMLVideoElement.requestPictureInPicture()`) — lets a single `<video>` element float in a system-managed window above all browser tabs. Standard since Chrome 70 / Safari 13 / Firefox 71. Fine for one remote participant.
6
-
7
- 2. **Document PiP** (`window.documentPictureInPicture.requestWindow()`) — lets you put arbitrary HTML (custom call UI with controls, multi-tile grid, roster) in a floating window. Chrome 116+ only. Falls back gracefully where unsupported.
8
-
9
- This reference covers both, plus when to pick which.
10
-
11
- ---
12
-
13
- ## When to use Video PiP vs Document PiP
14
-
15
- | Scenario | Pick |
16
- |---|---|
17
- | 1:1 call, just want the remote face floating while user works | Video PiP |
18
- | Multi-party call, want the active speaker + a small roster floating | Document PiP if Chrome 116+, else fall back to Video PiP |
19
- | Want call controls (mute/end) visible in the PiP window | Document PiP only — Video PiP doesn't allow custom controls |
20
- | Cross-browser support including Safari + Firefox | Video PiP (with fallback when neither works) |
21
-
22
- The skill defaults to Video PiP for cross-browser compatibility; Document PiP is opt-in for Chromium-only apps.
23
-
24
- ---
25
-
26
- ## Video PiP — the simple path
27
-
28
- ```tsx
29
- // CustomOngoingCallView.tsx — extends the version in references/custom-ui.md
30
- const remoteVideoRef = useRef<HTMLVideoElement>(null);
31
- const [pipActive, setPipActive] = useState(false);
32
-
33
- async function enterPiP() {
34
- const video = remoteVideoRef.current;
35
- if (!video) return;
36
- if (!document.pictureInPictureEnabled) {
37
- setError("Picture-in-Picture isn't supported in this browser");
38
- return;
39
- }
40
- try {
41
- await video.requestPictureInPicture();
42
- setPipActive(true);
43
- } catch (err) {
44
- // user denied, video not yet playing, etc.
45
- console.warn("PiP request failed:", err);
46
- }
47
- }
48
-
49
- useEffect(() => {
50
- const video = remoteVideoRef.current;
51
- if (!video) return;
52
- const onEnter = () => setPipActive(true);
53
- const onLeave = () => setPipActive(false);
54
- video.addEventListener("enterpictureinpicture", onEnter);
55
- video.addEventListener("leavepictureinpicture", onLeave);
56
- return () => {
57
- video.removeEventListener("enterpictureinpicture", onEnter);
58
- video.removeEventListener("leavepictureinpicture", onLeave);
59
- };
60
- }, []);
61
- ```
62
-
63
- The `<video>` element keeps playing — PiP doesn't pause or remount. CSS doesn't apply (the OS owns the floating window). Hide the in-page video when PiP is active to avoid the "two videos playing" UX:
64
-
65
- ```tsx
66
- <video
67
- ref={remoteVideoRef}
68
- autoPlay
69
- playsInline
70
- style={{ display: pipActive ? "none" : "block" }}
71
- />
72
- ```
73
-
74
- ---
75
-
76
- ## Document PiP — the rich path (Chrome 116+)
77
-
78
- ```tsx
79
- const [pipWindow, setPipWindow] = useState<Window | null>(null);
80
-
81
- async function enterDocumentPiP() {
82
- // Feature detect
83
- if (!("documentPictureInPicture" in window)) {
84
- return enterPiP(); // fall through to video PiP
85
- }
86
-
87
- const pipWin = await (window as unknown as {
88
- documentPictureInPicture: { requestWindow: (opts: { width: number; height: number }) => Promise<Window> };
89
- }).documentPictureInPicture.requestWindow({
90
- width: 360,
91
- height: 480,
92
- });
93
-
94
- // Copy the call container into the PiP window
95
- const container = document.getElementById("ongoing-call-root");
96
- if (container) {
97
- pipWin.document.body.appendChild(container);
98
- }
99
-
100
- // PiP window has its own document — copy stylesheets so kit styling works
101
- for (const styleSheet of Array.from(document.styleSheets)) {
102
- try {
103
- const cssRules = Array.from(styleSheet.cssRules ?? []).map((r) => r.cssText).join("\n");
104
- const style = pipWin.document.createElement("style");
105
- style.textContent = cssRules;
106
- pipWin.document.head.appendChild(style);
107
- } catch {
108
- // cross-origin stylesheets throw — copy <link> href instead
109
- if (styleSheet.href) {
110
- const link = pipWin.document.createElement("link");
111
- link.rel = "stylesheet";
112
- link.href = styleSheet.href;
113
- pipWin.document.head.appendChild(link);
114
- }
115
- }
116
- }
117
-
118
- // When the user closes the PiP window (system X button), restore the container
119
- pipWin.addEventListener("pagehide", () => {
120
- const restored = pipWin.document.getElementById("ongoing-call-root");
121
- if (restored && document.getElementById("call-host")) {
122
- document.getElementById("call-host")!.appendChild(restored);
123
- }
124
- setPipWindow(null);
125
- });
126
-
127
- setPipWindow(pipWin);
128
- }
129
- ```
130
-
131
- The `container` keeps its event handlers and React fiber attached — clicking "End" inside the PiP window still calls your React handlers. This is the magic of Document PiP that single-video PiP doesn't give you.
132
-
133
- **Caveat:** stylesheets are copied at PiP-open time. If you change the theme mid-PiP (light/dark toggle), styles in the PiP window go stale. Add a `MutationObserver` or just don't allow theme switching while PiP is active.
134
-
135
- ---
136
-
137
- ## Browser support matrix
138
-
139
- | Browser | Video PiP | Document PiP |
140
- |---|---|---|
141
- | Chrome 70+ desktop | ✓ | Chrome 116+ |
142
- | Edge 79+ desktop | ✓ | Edge 116+ |
143
- | Safari 13+ desktop | ✓ | ✗ (no plans yet) |
144
- | Firefox 71+ desktop | ✓ (custom toggle UI, not standard API) | ✗ |
145
- | Chrome mobile (Android) | ✓ system-PiP equivalent | ✗ |
146
- | Safari iOS | iPad: ✓; iPhone: limited | ✗ |
147
-
148
- Feature-detect both. Don't render the "Enter PiP" button when neither is supported.
149
-
150
- ```tsx
151
- const canVideoPiP = typeof document !== "undefined" && document.pictureInPictureEnabled;
152
- const canDocPiP = typeof window !== "undefined" && "documentPictureInPicture" in window;
153
- const showPipButton = canVideoPiP || canDocPiP;
154
- ```
155
-
156
- ---
157
-
158
- ## Auto-enter PiP on tab switch
159
-
160
- A "tab visibility" pattern many call UX teams want — auto-enter PiP when the user switches away from the call tab:
161
-
162
- ```tsx
163
- useEffect(() => {
164
- const onVisibilityChange = () => {
165
- if (document.visibilityState === "hidden" && remoteVideoRef.current) {
166
- remoteVideoRef.current.requestPictureInPicture().catch(() => {});
167
- }
168
- };
169
- document.addEventListener("visibilitychange", onVisibilityChange);
170
- return () => document.removeEventListener("visibilitychange", onVisibilityChange);
171
- }, []);
172
- ```
173
-
174
- Browsers reject auto-PiP requests not tied to user gestures in some contexts (Safari is strictest). Use `await navigator.mediaSession.setActionHandler("enterpictureinpicture", ...)` for a cleaner API where supported.
175
-
176
- ---
177
-
178
- ## Auto-leave PiP on hangup
179
-
180
- When the call ends, exit PiP cleanly:
181
-
182
- ```tsx
183
- function endCall() {
184
- if (document.pictureInPictureElement) {
185
- document.exitPictureInPicture();
186
- }
187
- if (pipWindow) {
188
- pipWindow.close();
189
- setPipWindow(null);
190
- }
191
- CometChatCalls.leaveSession();
192
- // ...rest of cleanup
193
- }
194
- ```
195
-
196
- Without this, the PiP window stays floating after the call ends, showing a frozen frame.
197
-
198
- ---
199
-
200
- ## PiP + custom UI integration
201
-
202
- If you're using `enableDefaultLayout(true)` (kit-rendered call UI), PiP works on the kit's internal `<video>` element. Reach into it via:
203
-
204
- ```ts
205
- const callContainer = document.getElementById("calls-container");
206
- const video = callContainer?.querySelector("video"); // kit renders one or more
207
- if (video instanceof HTMLVideoElement) {
208
- await video.requestPictureInPicture();
209
- }
210
- ```
211
-
212
- Brittle — kit DOM structure can change between versions. Custom UI (Document PiP path above) is more stable.
213
-
214
- ---
215
-
216
- ## Anti-patterns
217
-
218
- 1. **Calling `requestPictureInPicture()` from `useEffect` on mount.** Browsers reject — must be in response to user gesture. Wire to a button.
219
- 2. **Forgetting to hide the in-page `<video>` while PiP is active.** Two videos play, audio doubles, layout breaks.
220
- 3. **Document PiP without copying stylesheets.** PiP window renders unstyled; user sees raw HTML.
221
- 4. **Not exiting PiP on hangup.** Frozen frame floats after call ends.
222
- 5. **Document PiP detection via `'documentPictureInPicture' in document`.** It's on `window`, not `document`. Common typo.
223
- 6. **Auto-PiP on every visibility change, including page reload.** User reloads → unintended PiP. Gate on call active + user-initiated focus loss.
224
-
225
- ---
226
-
227
- ## Verification checklist
228
-
229
- - [ ] PiP button only renders if `document.pictureInPictureEnabled` OR `'documentPictureInPicture' in window`
230
- - [ ] PiP request triggered from a click handler, not `useEffect`
231
- - [ ] In-page video hidden while PiP active (or repositioned)
232
- - [ ] `enterpictureinpicture` / `leavepictureinpicture` listeners update local state
233
- - [ ] Hangup path calls `document.exitPictureInPicture()` if active
234
- - [ ] Document PiP path copies stylesheets to the PiP window's document
235
- - [ ] Document PiP path restores the container to the main window on `pagehide`
236
- - [ ] Real-browser smoke: Chrome desktop (both APIs) + Safari desktop (Video PiP) + Firefox (Video PiP)
237
-
238
- ---
239
-
240
- ## Pointers
241
-
242
- - Custom UI integration: `references/custom-ui.md`
243
- - Kit-default layout: kit handles internal video PiP via the kit's own controls
244
- - Document PiP spec: https://wicg.github.io/document-picture-in-picture/
245
- - `cometchat-react-calls` SKILL.md — base hard rules
@@ -1,238 +0,0 @@
1
- # Raise hand on web
2
-
3
- Lets participants signal they want to speak without interrupting the current speaker. The SDK ships first-party support — four method calls, two events, one settings flag. No custom signaling needed.
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/javascript/raise-hand
6
- **Use it for:** classrooms, large group calls, town halls, any call with > ~5 participants where verbal turn-taking gets messy.
7
-
8
- ---
9
-
10
- ## SDK API (web Calls SDK)
11
-
12
- ```ts
13
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
14
-
15
- // Local user raises hand
16
- CometChatCalls.raiseHand();
17
-
18
- // Local user lowers hand
19
- CometChatCalls.lowerHand();
20
-
21
- // Subscribe to other participants' hand state
22
- CometChatCalls.addEventListener("onParticipantHandRaised", (participant) => {
23
- // participant.uid, participant.name available
24
- });
25
-
26
- CometChatCalls.addEventListener("onParticipantHandLowered", (participant) => {
27
- // ...
28
- });
29
- ```
30
-
31
- The SDK ships a built-in raise-hand button in the default control panel. Hide it via call settings if you're rolling custom UI:
32
-
33
- ```ts
34
- // SessionSettings object passed to joinSession(token, settings, container).
35
- // hideRaiseHandButton is a SessionSettings field — NOT a CallSettingsBuilder
36
- // method, and there is no setSessionID (the session is carried by the token
37
- // from generateToken(sessionId)).
38
- const settings = { hideRaiseHandButton: true }; // suppress the SDK's button — your UI takes over
39
- ```
40
-
41
- ---
42
-
43
- ## When to use built-in vs custom
44
-
45
- | Scenario | Use |
46
- |---|---|
47
- | Default kit UI is fine; just want raise-hand | Built-in (don't pass `hideRaiseHandButton`) |
48
- | Custom call UI (your own control panel) | Custom — call `raiseHand()` / `lowerHand()` from your buttons |
49
- | Need different host vs participant UI | Custom — query group scope, render different controls |
50
- | Need raise-hand list (host sees who's raised) | Custom — maintain local Map<uid, raisedAt> via the listeners |
51
-
52
- ---
53
-
54
- ## Custom raise-hand UX — three pieces
55
-
56
- ### 1. Local participant button (toggle)
57
-
58
- ```tsx
59
- import { useState } from "react";
60
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
61
-
62
- function RaiseHandButton() {
63
- const [raised, setRaised] = useState(false);
64
-
65
- function toggle() {
66
- if (raised) {
67
- CometChatCalls.lowerHand();
68
- setRaised(false);
69
- } else {
70
- CometChatCalls.raiseHand();
71
- setRaised(true);
72
- }
73
- }
74
-
75
- return (
76
- <button onClick={toggle} aria-pressed={raised}>
77
- {raised ? "✋ Lower" : "✋ Raise hand"}
78
- </button>
79
- );
80
- }
81
- ```
82
-
83
- Visual hint: render the icon with `aria-pressed={raised}` so screen readers announce the toggle state. (See `cometchat-a11y` for the broader rule.)
84
-
85
- ### 2. Raised-hands roster (host view)
86
-
87
- ```tsx
88
- import { useEffect, useState } from "react";
89
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
90
-
91
- interface RaisedParticipant { uid: string; name: string; raisedAt: number; }
92
-
93
- function RaisedHandsList() {
94
- const [raised, setRaised] = useState<Map<string, RaisedParticipant>>(new Map());
95
-
96
- useEffect(() => {
97
- const onRaised = (p: { uid: string; name: string }) => {
98
- setRaised(prev => {
99
- const next = new Map(prev);
100
- next.set(p.uid, { ...p, raisedAt: Date.now() });
101
- return next;
102
- });
103
- };
104
- const onLowered = (p: { uid: string }) => {
105
- setRaised(prev => {
106
- const next = new Map(prev);
107
- next.delete(p.uid);
108
- return next;
109
- });
110
- };
111
-
112
- // addEventListener returns an unsubscribe fn — there is no removeEventListener.
113
- const offRaised = CometChatCalls.addEventListener("onParticipantHandRaised", onRaised);
114
- const offLowered = CometChatCalls.addEventListener("onParticipantHandLowered", onLowered);
115
-
116
- return () => {
117
- offRaised();
118
- offLowered();
119
- };
120
- }, []);
121
-
122
- // Sort oldest-first — fairness queue
123
- const sorted = Array.from(raised.values()).sort((a, b) => a.raisedAt - b.raisedAt);
124
- if (sorted.length === 0) return null;
125
-
126
- return (
127
- <ul aria-label="Raised hands queue">
128
- {sorted.map(p => (
129
- <li key={p.uid}>
130
- ✋ {p.name} <span style={{ color: "#888" }}>{secondsAgo(p.raisedAt)}</span>
131
- </li>
132
- ))}
133
- </ul>
134
- );
135
- }
136
-
137
- function secondsAgo(t: number) { return `${Math.round((Date.now() - t) / 1000)}s ago`; }
138
- ```
139
-
140
- Sort by `raisedAt` ascending = first-raised-first-called, which feels fair to participants. Don't sort alphabetically.
141
-
142
- ### 3. Toast notification for the host
143
-
144
- ```tsx
145
- useEffect(() => {
146
- const onRaised = (p: { name: string }) => {
147
- toast.info(`${p.name} raised their hand`, { duration: 4000 });
148
- };
149
- const offRaised = CometChatCalls.addEventListener("onParticipantHandRaised", onRaised);
150
- return () => offRaised();
151
- }, []);
152
- ```
153
-
154
- Use `aria-live="polite"` on the toast region so screen readers announce — same a11y pattern as new-message announcements (cf. `cometchat-a11y`).
155
-
156
- ---
157
-
158
- ## Lower-by-host pattern
159
-
160
- The SDK exposes `lowerHand()` only for the local user. To let a host lower someone else's hand, you need a moderator action via the participant-management API:
161
-
162
- ```ts
163
- // Host action — requires moderator/admin scope on the group
164
- async function lowerParticipantHand(uid: string) {
165
- // SDK doesn't expose remoteLowerHand directly. Two options:
166
- // A) Send a custom message to the participant; their client lowers itself
167
- // B) Use the moderator mute/kick API as the boundary
168
-
169
- // Option A: lightweight, requires the participant's client to listen
170
- await CometChat.sendCustomMessage(new CometChat.CustomMessage(
171
- uid, CometChat.RECEIVER_TYPE.USER, "lower_hand", {}
172
- ));
173
- }
174
- ```
175
-
176
- On the receiving side:
177
-
178
- ```ts
179
- CometChat.addMessageListener("raise-hand-control", new CometChat.MessageListener({
180
- onCustomMessageReceived: (msg) => {
181
- if (msg.getType() === "lower_hand") {
182
- CometChatCalls.lowerHand();
183
- }
184
- },
185
- }));
186
- ```
187
-
188
- This is application-level signaling, not SDK-built-in. Document the contract in your team's call protocols.
189
-
190
- ---
191
-
192
- ## Hide button on rendered surfaces
193
-
194
- If using the kit's `<CometChatOngoingCall />` and want raise-hand off entirely (e.g. 1:1 calls don't need it):
195
-
196
- ```tsx
197
- import { CometChatCalls } from "@cometchat/calls-sdk-javascript";
198
-
199
- // SessionSettings object for joinSession (hideRaiseHandButton is an object field).
200
- const settings = { hideRaiseHandButton: true };
201
- ```
202
-
203
- For 1:1 calls, default to hidden. For group calls > 5 participants, default to shown.
204
-
205
- ---
206
-
207
- ## Anti-patterns
208
-
209
- 1. **Polling for raised-hand state.** The SDK fires events on change — listen, don't poll. Polling burns CPU.
210
- 2. **Sorting raised-hands alphabetically.** First-raised-first-called is the fair queue. Sort by `raisedAt` ascending.
211
- 3. **Auto-lowering hands after a timer.** Some people raise their hand and wait. Letting the SDK manage state means the participant lowers when called or via their own button.
212
- 4. **Showing raise-hand button in 1:1 calls.** Visually noisy and pointless. Gate on `participantCount > 2`.
213
- 5. **Skipping the listener cleanup in `useEffect`'s return.** Stacked listeners fire multiple times when the component re-mounts — duplicate toasts, duplicate roster entries.
214
- 6. **Treating "hand raised" as a permission grant.** Raise-hand is a request, not a mute override. The host still has to unmute the participant separately.
215
-
216
- ---
217
-
218
- ## Verification checklist
219
-
220
- - [ ] `raiseHand()` / `lowerHand()` calls in your code (not just relying on the SDK button)
221
- - [ ] Both `onParticipantHandRaised` and `onParticipantHandLowered` listeners registered
222
- - [ ] Listeners cleaned up in component unmount (return from `useEffect`)
223
- - [ ] Roster sorted by `raisedAt` ascending
224
- - [ ] `hideRaiseHandButton: true` in call settings IF custom UI is used (otherwise duplicates)
225
- - [ ] Toast / badge UI uses `aria-live="polite"` (a11y)
226
- - [ ] Browser smoke: 3 tabs, hand-raise from 2 of them, host's roster shows both in raise-order
227
- - [ ] Lower-hand smoke: tab A raises, lowers, host's roster updates without page refresh
228
-
229
- ---
230
-
231
- ## Pointers
232
-
233
- - `cometchat-react-calls` SKILL.md — the seven hard rules (still apply for raise-hand UI)
234
- - `references/group-calls.md` — group call architecture (raise-hand is a group-call feature)
235
- - `references/custom-ui.md` — custom call UI patterns
236
- - `cometchat-a11y` — toast announcements for raised-hand events
237
- - Canonical docs: https://www.cometchat.com/docs/calls/javascript/raise-hand
238
- - For deeper SDK reference (other event types, presenter-mode interplay): query the docs MCP at `https://www.cometchat.com/docs/mcp`