@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,276 +0,0 @@
1
- # Picture-in-Picture on React Native
2
-
3
- Both Android and iOS support PiP for video calls — but the integration paths are different. Android exposes `PictureInPictureParams` via `Activity` APIs; iOS exposes `AVPictureInPictureController` (and CallKit handles it for VoIP calls). RN bridges both via native modules.
4
-
5
- ---
6
-
7
- ## Android — Activity-level PiP
8
-
9
- Android PiP is an Activity attribute. The activity declares it supports PiP, and you transition into PiP by calling `enterPictureInPictureMode()` from native (RN exposes a bridge).
10
-
11
- ### Manifest
12
-
13
- ```xml
14
- <!-- android/app/src/main/AndroidManifest.xml -->
15
- <activity
16
- android:name=".MainActivity"
17
- android:supportsPictureInPicture="true"
18
- android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden">
19
- <!-- ... -->
20
- </activity>
21
- ```
22
-
23
- `configChanges` is critical — without it, Android destroys + recreates the activity on PiP transition, which kills the WebRTC connection.
24
-
25
- ### Bridge
26
-
27
- `react-native-webrtc` ships a helper module (in some versions) for entering PiP. If your version doesn't have it, write a tiny native module:
28
-
29
- ```kotlin
30
- // android/app/src/main/java/com/yourapp/PictureInPictureModule.kt
31
- package com.yourapp
32
-
33
- import android.app.PictureInPictureParams
34
- import android.os.Build
35
- import android.util.Rational
36
- import com.facebook.react.bridge.ReactApplicationContext
37
- import com.facebook.react.bridge.ReactContextBaseJavaModule
38
- import com.facebook.react.bridge.ReactMethod
39
- import com.facebook.react.bridge.Promise
40
-
41
- class PictureInPictureModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
42
- override fun getName() = "PictureInPicture"
43
-
44
- @ReactMethod
45
- fun enterPip(promise: Promise) {
46
- val activity = currentActivity
47
- if (activity == null) {
48
- promise.reject("NO_ACTIVITY", "No current activity")
49
- return
50
- }
51
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
52
- promise.reject("UNSUPPORTED", "Android < 8.0 doesn't support PiP")
53
- return
54
- }
55
-
56
- val aspectRatio = Rational(16, 9)
57
- val params = PictureInPictureParams.Builder()
58
- .setAspectRatio(aspectRatio)
59
- .build()
60
-
61
- val ok = activity.enterPictureInPictureMode(params)
62
- if (ok) promise.resolve(null) else promise.reject("FAILED", "Couldn't enter PiP")
63
- }
64
- }
65
- ```
66
-
67
- Register in `MainApplication.kt`:
68
-
69
- ```kotlin
70
- override fun getPackages(): List<ReactPackage> {
71
- val packages = PackageList(this).packages
72
- packages.add(PictureInPicturePackage()) // your package wrapping the module
73
- return packages
74
- }
75
- ```
76
-
77
- ### React side
78
-
79
- ```ts
80
- import { NativeModules, Platform } from "react-native";
81
-
82
- const PictureInPicture = NativeModules.PictureInPicture;
83
-
84
- async function enterPiP() {
85
- if (Platform.OS !== "android") return;
86
- try {
87
- await PictureInPicture.enterPip();
88
- } catch (err) {
89
- console.warn("PiP failed:", err);
90
- }
91
- }
92
- ```
93
-
94
- ### Listening for PiP transitions
95
-
96
- On Android, the activity gets `onPictureInPictureModeChanged` callback. RN exposes this via `AppState`:
97
-
98
- ```ts
99
- import { AppState, type AppStateStatus } from "react-native";
100
-
101
- useEffect(() => {
102
- const handler = (state: AppStateStatus) => {
103
- // 'background' fires when entering PiP on some Android versions
104
- // 'active' fires on returning
105
- if (state === "active") {
106
- // restore full UI
107
- }
108
- };
109
- const sub = AppState.addEventListener("change", handler);
110
- return () => sub.remove();
111
- }, []);
112
- ```
113
-
114
- Better — emit a custom event from your native module on `onPictureInPictureModeChanged` and listen in JS:
115
-
116
- ```ts
117
- import { NativeEventEmitter, NativeModules } from "react-native";
118
-
119
- const emitter = new NativeEventEmitter(NativeModules.PictureInPicture);
120
- useEffect(() => {
121
- const sub = emitter.addListener("pipModeChanged", ({ inPip }: { inPip: boolean }) => {
122
- setInPip(inPip);
123
- });
124
- return () => sub.remove();
125
- }, []);
126
- ```
127
-
128
- ---
129
-
130
- ## iOS — CallKit handles it for VoIP calls
131
-
132
- The simplest iOS PiP path: **don't write any.** If you've integrated CallKit (rule 1.2 in the SKILL.md, mandatory for standalone-mode VoIP), iOS auto-handles PiP for active video calls when the user backgrounds the app. The system shows your CallKit-reported call in a small floating window.
133
-
134
- For non-CallKit calls (in-foreground only), you need `AVPictureInPictureController`. This is involved on iOS because `AVPictureInPictureController` requires an `AVSampleBufferDisplayLayer` — it doesn't work directly with `<RTCView />`.
135
-
136
- ### AVPictureInPictureController bridge
137
-
138
- `react-native-webrtc` ≥ 119 ships an `RTCVideoView` that supports PiP via a system-managed display layer. The bridge:
139
-
140
- ```ts
141
- import { RTCView } from "react-native-webrtc";
142
-
143
- // react-native-webrtc 119+
144
- <RTCView
145
- streamURL={remoteStream.toURL()}
146
- style={styles.remoteVideo}
147
- pictureInPicture={true}
148
- onPictureInPictureStart={() => setInPip(true)}
149
- onPictureInPictureStop={() => setInPip(false)}
150
- />
151
- ```
152
-
153
- Older versions: write a wrapper around `AVPictureInPictureController` and a `WebRTCVideoView` subclass that exposes its `AVSampleBufferDisplayLayer` to the controller. Substantial native work; deferring to CallKit is the right call for most apps.
154
-
155
- ### Info.plist
156
-
157
- Background modes must include `audio` (rule 1.3 in the SKILL.md). PiP itself doesn't need a separate capability; it inherits from "audio" + active call.
158
-
159
- ---
160
-
161
- ## App state preservation across PiP
162
-
163
- When the app enters PiP (Android) or background-with-active-call (iOS), the call state must persist. Practical rules:
164
-
165
- 1. **Don't tear down the WebRTC connection** on `componentWillUnmount` of the call screen. The screen survives PiP; tearing down kills the call.
166
- 2. **Hide the in-page video** when PiP is active — same rule as web. Two videos rendering = bad UX, double battery.
167
- 3. **Restore on PiP exit** — listen to `pipModeChanged` and re-render the full call surface.
168
-
169
- ```tsx
170
- function CallScreen() {
171
- const [inPip, setInPip] = useState(false);
172
-
173
- return (
174
- <View style={[styles.container, inPip && styles.minimalPip]}>
175
- <RTCView
176
- streamURL={remoteStream?.toURL()}
177
- style={inPip ? styles.pipFullSize : styles.normalSize}
178
- pictureInPicture={true}
179
- onPictureInPictureStart={() => setInPip(true)}
180
- onPictureInPictureStop={() => setInPip(false)}
181
- />
182
- {!inPip && <ControlPanel onEnd={endCall} />}
183
- </View>
184
- );
185
- }
186
- ```
187
-
188
- The control panel is only visible in non-PiP mode; PiP is video-only by design.
189
-
190
- ---
191
-
192
- ## Auto-PiP on app backgrounding
193
-
194
- Common UX: user presses Home button or switches apps → call auto-enters PiP so video keeps playing.
195
-
196
- ### Android
197
-
198
- In `MainActivity.kt`:
199
-
200
- ```kotlin
201
- override fun onUserLeaveHint() {
202
- super.onUserLeaveHint()
203
- // User pressed Home — auto-enter PiP if a call is active
204
- if (isCallActive() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
205
- enterPictureInPictureMode(PictureInPictureParams.Builder().build())
206
- }
207
- }
208
-
209
- private fun isCallActive(): Boolean {
210
- // bridge to JS state — store this in a SharedPreferences flag
211
- return getSharedPreferences("call", MODE_PRIVATE).getBoolean("active", false)
212
- }
213
- ```
214
-
215
- JS side: write the flag whenever the call starts/ends:
216
-
217
- ```ts
218
- import { NativeModules } from "react-native";
219
-
220
- useEffect(() => {
221
- NativeModules.PictureInPicture.setCallActive(true);
222
- return () => NativeModules.PictureInPicture.setCallActive(false);
223
- }, []);
224
- ```
225
-
226
- ### iOS
227
-
228
- CallKit handles this — if you've reported the call to CallKit (rule 1.2), iOS auto-PiPs on background. No bridge code needed for the auto-PiP path.
229
-
230
- For non-CallKit calls (rare in production calling apps), use `react-native-webrtc`'s `pictureInPicture` prop with auto-enter behavior at the native level.
231
-
232
- ---
233
-
234
- ## Anti-patterns
235
-
236
- 1. **Skipping `configChanges` on the manifest activity.** PiP transition destroys + recreates the activity → call dies.
237
- 2. **Tearing down WebRTC in PiP transition.** Same outcome — call dies.
238
- 3. **No iOS Background Modes `audio` capability.** PiP video plays without sound; user thinks it's broken.
239
- 4. **Auto-PiP on every app background, including non-call screens.** User opens settings, comes back to a PiP'd home screen. Gate on `isCallActive()`.
240
- 5. **Rendering control panel inside PiP window.** PiP windows are small; controls don't fit. Hide them.
241
- 6. **Using two separate `<RTCView />` instances** — one for normal, one for PiP. The `pictureInPicture` prop on a single view is the right pattern.
242
- 7. **iOS PiP without CallKit.** Doesn't work for backgrounded calls — only foregrounded. CallKit is required for "real" PiP.
243
-
244
- ---
245
-
246
- ## Verification checklist
247
-
248
- **Android:**
249
- - [ ] `android:supportsPictureInPicture="true"` on the activity
250
- - [ ] `android:configChanges` includes screenSize/smallestScreenSize/screenLayout/orientation
251
- - [ ] Native PiP module registered + bridged
252
- - [ ] `onUserLeaveHint` auto-PiP gated on `isCallActive()`
253
- - [ ] PiP entry uses 16:9 aspect ratio (or matches stream resolution)
254
- - [ ] PiP mode change emits to JS; controls hidden in PiP
255
-
256
- **iOS:**
257
- - [ ] CallKit integrated (rule 1.2 in SKILL.md)
258
- - [ ] Background Modes: audio + voip + remote-notification
259
- - [ ] `react-native-webrtc` ≥ 119 if using `pictureInPicture` prop
260
- - [ ] PiP transitions don't tear down call
261
-
262
- **Real-device smoke:**
263
- - [ ] Android: press Home during call → PiP appears, video keeps playing, audio continues
264
- - [ ] Android: tap PiP window → call screen restored, controls visible
265
- - [ ] iOS: press Home during call → CallKit-managed PiP appears
266
- - [ ] iOS: tap PiP → app foregrounds, full call screen visible
267
-
268
- ---
269
-
270
- ## Pointers
271
-
272
- - `references/custom-ui.md` — composing custom call surfaces (PiP integration via the `pictureInPicture` prop pattern)
273
- - `references/voip-push-end-to-end.md` — CallKit which handles iOS PiP for free
274
- - `cometchat-android-v5-calls/references/picture-in-picture.md` — Android-native PiP reference (deeper Android-specific patterns)
275
- - `cometchat-react-calls/references/picture-in-picture.md` — Web PiP (different APIs but same UX shape)
276
- - `cometchat-native-calls` SKILL.md — base hard rules
@@ -1,205 +0,0 @@
1
- # Raise hand on React Native
2
-
3
- Same SDK API as web (`@cometchat/calls-sdk-react-native` exposes the same calls). The difference is the UI surface — native components instead of HTML, RN re-renders with state, no `aria-pressed` (use `accessibilityState` instead).
4
-
5
- **Canonical docs:** https://www.cometchat.com/docs/calls/react-native/raise-hand
6
- **Read first:** `cometchat-react-calls/references/raise-hand.md` — the integration shape and anti-patterns are identical; this reference covers RN-specific wiring.
7
-
8
- ---
9
-
10
- ## SDK API
11
-
12
- ```ts
13
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
14
-
15
- CometChatCalls.raiseHand();
16
- CometChatCalls.lowerHand();
17
-
18
- // addEventListener returns an unsubscribe function — capture it, call it in cleanup.
19
- const off = CometChatCalls.addEventListener("onParticipantHandRaised", (p) => { ... });
20
- // later: off();
21
-
22
- // Button visibility is a SessionSettings OBJECT field, not a builder method:
23
- const settings = {
24
- hideRaiseHandButton: true,
25
- };
26
- ```
27
-
28
- ---
29
-
30
- ## RN-specific UX patterns
31
-
32
- ### Toggle button (TouchableOpacity)
33
-
34
- ```tsx
35
- import { useState } from "react";
36
- import { TouchableOpacity, Text, AccessibilityInfo } from "react-native";
37
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
38
-
39
- function RaiseHandButton() {
40
- const [raised, setRaised] = useState(false);
41
-
42
- function toggle() {
43
- if (raised) {
44
- CometChatCalls.lowerHand();
45
- setRaised(false);
46
- AccessibilityInfo.announceForAccessibility("Hand lowered");
47
- } else {
48
- CometChatCalls.raiseHand();
49
- setRaised(true);
50
- AccessibilityInfo.announceForAccessibility("Hand raised");
51
- }
52
- }
53
-
54
- return (
55
- <TouchableOpacity
56
- onPress={toggle}
57
- accessibilityRole="button"
58
- accessibilityState={{ selected: raised }}
59
- accessibilityLabel={raised ? "Lower hand" : "Raise hand"}
60
- style={{
61
- padding: 12,
62
- borderRadius: 32,
63
- backgroundColor: raised ? "#FFD60A" : "rgba(255,255,255,0.2)",
64
- }}
65
- >
66
- <Text style={{ color: raised ? "#000" : "#FFF" }}>
67
- ✋ {raised ? "Lower" : "Raise"}
68
- </Text>
69
- </TouchableOpacity>
70
- );
71
- }
72
- ```
73
-
74
- `AccessibilityInfo.announceForAccessibility` is the RN equivalent of web's `aria-live` regions — TalkBack / VoiceOver pick up the announcement. This is the canonical RN a11y pattern (cf. `cometchat-a11y`).
75
-
76
- ### Raised-hands roster (BottomSheet pattern)
77
-
78
- For a host's "raised hands" list, the natural RN UX is a bottom sheet rather than a permanent sidebar (vertical phone screens are tight on horizontal real estate):
79
-
80
- ```tsx
81
- import { useEffect, useRef, useState } from "react";
82
- import { View, Text, FlatList } from "react-native";
83
- import BottomSheet from "@gorhom/bottom-sheet";
84
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
85
-
86
- interface RaisedParticipant { uid: string; name: string; raisedAt: number; }
87
-
88
- function RaisedHandsSheet() {
89
- const sheetRef = useRef<BottomSheet>(null);
90
- const [raised, setRaised] = useState<Map<string, RaisedParticipant>>(new Map());
91
-
92
- useEffect(() => {
93
- const onRaised = (p: { uid: string; name: string }) => {
94
- setRaised(prev => new Map(prev).set(p.uid, { ...p, raisedAt: Date.now() }));
95
- // Auto-expand the sheet on first hand raised
96
- if (raised.size === 0) sheetRef.current?.snapToIndex(1);
97
- };
98
- const onLowered = (p: { uid: string }) => {
99
- setRaised(prev => {
100
- const next = new Map(prev);
101
- next.delete(p.uid);
102
- return next;
103
- });
104
- };
105
-
106
- // addEventListener returns an unsubscribe fn; collect them and call on cleanup.
107
- const offRaised = CometChatCalls.addEventListener("onParticipantHandRaised", onRaised);
108
- const offLowered = CometChatCalls.addEventListener("onParticipantHandLowered", onLowered);
109
- return () => {
110
- offRaised();
111
- offLowered();
112
- };
113
- }, [raised.size]);
114
-
115
- const sorted = Array.from(raised.values()).sort((a, b) => a.raisedAt - b.raisedAt);
116
-
117
- return (
118
- <BottomSheet ref={sheetRef} snapPoints={["10%", "40%"]} index={raised.size > 0 ? 1 : 0}>
119
- <View style={{ padding: 16 }}>
120
- <Text style={{ fontWeight: "600", marginBottom: 8 }}>
121
- Raised hands ({raised.size})
122
- </Text>
123
- <FlatList
124
- data={sorted}
125
- keyExtractor={(p) => p.uid}
126
- renderItem={({ item }) => (
127
- <Text style={{ paddingVertical: 6 }}>
128
- ✋ {item.name}
129
- </Text>
130
- )}
131
- />
132
- </View>
133
- </BottomSheet>
134
- );
135
- }
136
- ```
137
-
138
- `@gorhom/bottom-sheet` is the canonical RN bottom-sheet library; if you've already integrated CometChat the kit's setup includes its peer deps (`react-native-gesture-handler`, `react-native-reanimated`).
139
-
140
- ### Toast for the host
141
-
142
- ```tsx
143
- import Toast from "react-native-toast-message";
144
-
145
- useEffect(() => {
146
- const onRaised = (p: { name: string }) => {
147
- Toast.show({
148
- type: "info",
149
- text1: `${p.name} raised their hand`,
150
- visibilityTime: 4000,
151
- position: "top",
152
- });
153
- };
154
- const off = CometChatCalls.addEventListener("onParticipantHandRaised", onRaised);
155
- return () => off();
156
- }, []);
157
- ```
158
-
159
- ---
160
-
161
- ## When to gate raise-hand UI
162
-
163
- Same rule as web: hide for 1:1 calls. Gate on participant count:
164
-
165
- ```tsx
166
- const showRaiseHand = participants.length > 2;
167
- return showRaiseHand ? <RaiseHandButton /> : null;
168
- ```
169
-
170
- ---
171
-
172
- ## Anti-patterns
173
-
174
- Same shape as web (cf. sister reference) plus RN-specific:
175
-
176
- 1. **Forgetting `accessibilityRole="button"`.** TouchableOpacity defaults to "image" or no role — TalkBack reads it wrong. Always set the role.
177
- 2. **`Toast.show` from inside the SDK callback without UI-thread guarantee.** Toast lib usually handles this, but if you use a custom toast, wrap in `requestAnimationFrame` or check that the call from the SDK callback is on the JS thread.
178
- 3. **BottomSheet with a single snap-point.** Use 2 snaps so users can collapse without dismissing entirely.
179
- 4. **Animating the raise-hand badge with Reanimated `withSpring`** in a video-call context. CPU-intensive; can stutter the WebRTC pipeline. Use `withTiming` with short durations or skip the animation.
180
-
181
- ---
182
-
183
- ## Verification checklist
184
-
185
- - [ ] `raiseHand()` / `lowerHand()` wired to your toggle button
186
- - [ ] Both event listeners registered + cleaned up
187
- - [ ] `accessibilityState`, `accessibilityRole`, `accessibilityLabel` on the toggle button
188
- - [ ] `AccessibilityInfo.announceForAccessibility` on state change
189
- - [ ] Roster sorted by `raisedAt` ascending
190
- - [ ] `hideRaiseHandButton: true` in CallSettings if custom UI
191
- - [ ] Real-device smoke: 3 devices in same call, hand-raise from 2 → host's BottomSheet shows both
192
- - [ ] iOS device: VoiceOver announces "Hand raised" / "Hand lowered"
193
- - [ ] Android device: TalkBack announces same
194
- - [ ] Visual at 360×640 (small Android phone) — button + sheet still legible
195
-
196
- ---
197
-
198
- ## Pointers
199
-
200
- - `cometchat-react-calls/references/raise-hand.md` — sister reference (same SDK, web-flavored UI)
201
- - `cometchat-native-calls` SKILL.md — the seven hard rules
202
- - `references/group-calls.md` — group call architecture
203
- - `references/custom-ui.md` — RN custom call UI
204
- - `cometchat-a11y` — RN announcement patterns
205
- - Canonical docs: https://www.cometchat.com/docs/calls/react-native/raise-hand
@@ -1,169 +0,0 @@
1
- # Recording + screen-share on React Native
2
-
3
- Both features live in the Calls SDK; both have RN-specific gotchas the kit's defaults don't handle. Sister of `cometchat-react-calls/references/recording-screen-share.md` — same SDK semantics, different platform plumbing for screen capture.
4
-
5
- ---
6
-
7
- ## Recording
8
-
9
- ### Server-side: dashboard gate
10
-
11
- Recording is a paid feature on most CometChat plans. Enable in **Dashboard → Chat & Messaging → Calls → Recording**. The client-side flag below is a no-op without it.
12
-
13
- ### Client-side: opt-in per session
14
-
15
- ```ts
16
- import { CometChatCalls } from "@cometchat/calls-sdk-react-native";
17
-
18
- // Audio vs video + recording are SessionSettings OBJECT fields (v5), not builder methods.
19
- // enableRecording()/setShowRecordingButton() do not exist on the v5 RN SDK.
20
- const sessionSettings = {
21
- sessionType: "VIDEO", // "VIDEO" | "AUDIO" — replaces the v4 setIsAudioOnlyCall builder
22
- autoStartRecording: true, // server starts recording when the session begins
23
- hideRecordingButton: false, // show the in-call recording toggle (kit's default UI)
24
- };
25
- ```
26
-
27
- ### Recording lifecycle events
28
-
29
- `CometChatCalls.OngoingCallListener` is still re-exported but is the v4-era path — **@deprecated, prefer `CometChatCalls.addEventListener(...)`** (which returns an unsubscribe fn). Only `onRecordingStarted` / `onRecordingStopped` exist; there is no `onRecordingFailed`.
30
-
31
- ```ts
32
- // Preferred (v5): addEventListener returns the unsubscribe fn.
33
- const offStarted = CometChatCalls.addEventListener("onRecordingStarted", () => {
34
- // Update UI — show a "REC" indicator (compliance requirement in some jurisdictions)
35
- setRecording(true);
36
- });
37
- const offStopped = CometChatCalls.addEventListener("onRecordingStopped", () => {
38
- setRecording(false);
39
- });
40
- // cleanup: offStarted(); offStopped();
41
- // NOTE: there is no onRecordingFailed event in the v5 RN SDK — do not listen for it.
42
- ```
43
-
44
- ### REC indicator (compliance)
45
-
46
- In some regions, you must visually notify all participants when recording is active. The kit's default `CometChatOngoingCall` shows a small "Recording" badge. Custom UI must render this:
47
-
48
- ```tsx
49
- {recording && (
50
- <View style={styles.recBadge}>
51
- <Text style={styles.recDot}>●</Text>
52
- <Text style={styles.recLabel}>REC</Text>
53
- </View>
54
- )}
55
- ```
56
-
57
- Don't omit this — the legal exposure is real (CCPA, GDPR, two-party-consent US states).
58
-
59
- ### Where the recordings go
60
-
61
- CometChat hosts the file. It appears in **Dashboard → Calls → Recordings** with a download link. There is no client-side download API — the file isn't exposed to the device for security/compliance reasons.
62
-
63
- For programmatic access:
64
-
65
- ```ts
66
- // Server-side — your backend with the dashboard bearer token
67
- const res = await fetch(
68
- `https://${region}.api-management.cometchat.io/v3/apps/${appId}/recordings`,
69
- { headers: { Authorization: `Bearer ${dashboardToken}` } },
70
- );
71
- const recordings = await res.json();
72
- ```
73
-
74
- The skill points users at this REST endpoint; it doesn't generate client code (recordings shouldn't be downloadable from the device).
75
-
76
- ---
77
-
78
- ## Screen sharing
79
-
80
- **Initiating a screen share from React Native is NOT supported.** Per the docs (`docs/calls/react-native/screen-sharing.mdx`): RN devices can only **view** screen shares started by participants on other platforms (web/desktop). There is no `startScreenSharing()` / `stopScreenSharing()` / `CometChatCalls.startScreenShare()` API on RN, no iOS Broadcast Extension flow, and no Android MediaProjection flow exposed by this SDK. Do not write screen-share-initiation code for RN.
81
-
82
- ### Viewer — receive / view a screen share
83
-
84
- When a participant shares their screen from another platform, the kit's default `CometChatOngoingCall` UI auto-renders the screen-share tile (it switches to Sidebar layout automatically). Listen for screen-share events only to drive custom UI.
85
-
86
- Two receive-path event channels exist (verified against the calls-sdk-react-native clone `skills/event-listeners/SKILL.md`):
87
-
88
- ```ts
89
- // Participant events — fire with the remote participant who shared:
90
- const offStart = CometChatCalls.addEventListener("onParticipantStartedScreenShare", (participant) => {
91
- setScreenSharePresenter(participant.name);
92
- });
93
- const offStop = CometChatCalls.addEventListener("onParticipantStoppedScreenShare", () => {
94
- setScreenSharePresenter(null);
95
- });
96
- // cleanup: offStart(); offStop();
97
-
98
- // Media-event channel (received from a web participant), no payload:
99
- CometChatCalls.addEventListener("onScreenShareStarted", () => { /* show screen-share tile */ });
100
- CometChatCalls.addEventListener("onScreenShareStopped", () => { /* restore prior layout */ });
101
- ```
102
-
103
- Custom-UI viewer composition:
104
-
105
- ```tsx
106
- function CustomCallView() {
107
- const [screenSharePresenter, setScreenSharePresenter] = useState<string | null>(null);
108
- const [participants, setParticipants] = useState<Participant[]>([]);
109
-
110
- return (
111
- <View style={styles.container}>
112
- {screenSharePresenter ? (
113
- <ScreenShareView presenterUid={screenSharePresenter} />
114
- ) : (
115
- <ParticipantTilesGrid participants={participants} />
116
- )}
117
- </View>
118
- );
119
- }
120
- ```
121
-
122
- When someone shares their screen, switch the layout to "screen share + participant strip"; switch back when they stop.
123
-
124
- ---
125
-
126
- ## Recording + screen-share together
127
-
128
- Server-side recording captures whatever video composition the SFU is forwarding. When a (web/desktop) participant is screen-sharing, the recording shows their screen. When they stop, it switches back to the camera composition.
129
-
130
- You don't compose this client-side — the server handles it. Custom UI just needs to render the screen-share track when present (receive path).
131
-
132
- ---
133
-
134
- ## Anti-patterns
135
-
136
- 1. **Trying to INITIATE a screen share from RN.** Not supported — there is no `startScreenSharing()`, iOS Broadcast Extension flow, or Android MediaProjection flow on this SDK. RN can only view shares from other platforms.
137
- 2. **No "REC" indicator in custom UI.** Compliance violation in two-party-consent jurisdictions.
138
- 3. **Trying to download recordings from the device.** They live on CometChat's servers. Use the dashboard or REST API.
139
- 4. **`autoStartRecording: true` without dashboard gate.** SessionSettings flag silently no-ops; user thinks recording is active when it isn't.
140
- 5. **Not handling the screen-share-stopped event in custom UI.** Layout doesn't switch back; viewer sees the last screen-share frame frozen.
141
-
142
- ---
143
-
144
- ## Verification checklist
145
-
146
- **Recording:**
147
- - [ ] Dashboard gate enabled (Recording feature on the plan)
148
- - [ ] `autoStartRecording: true` in the SessionSettings object (NOT a builder method)
149
- - [ ] `onRecordingStarted` / `onRecordingStopped` listeners wired via `addEventListener`
150
- - [ ] "REC" indicator visible to all participants when active
151
-
152
- **Screen share (RN = VIEW-only; initiation not supported):**
153
- - [ ] Custom UI: layout switches to screen-share view on `onParticipantStartedScreenShare` / `onScreenShareStarted`
154
- - [ ] Custom UI: layout switches back on `onParticipantStoppedScreenShare` / `onScreenShareStopped`
155
-
156
- **Real-device smoke:**
157
- - [ ] A web/desktop participant starts a screen share → it renders on the RN device
158
- - [ ] That participant stops sharing → RN view returns to camera composition smoothly
159
- - [ ] Recording starts, "REC" shows, recording appears in dashboard within ~30 seconds
160
-
161
- ---
162
-
163
- ## Pointers
164
-
165
- - `references/custom-ui.md` — building custom call surfaces with screen-share viewer
166
- - `references/group-calls.md` — group calls + screen share interplay (one share at a time)
167
- - `references/voip-push-end-to-end.md` — push payloads
168
- - `cometchat-native-calls` SKILL.md — base hard rules
169
- - `cometchat-react-calls/references/recording-screen-share.md` — sister web reference (same SDK semantics)