@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,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`